【问题标题】:Corrupted/overwritten excel file with write_xlsx使用 write_xlsx 损坏/覆盖的 excel 文件
【发布时间】:2021-05-31 14:55:12
【问题描述】:

我在 R 中使用此代码更改 excel 文件第四列的名称(感谢:Change column name with file name of corresponding excel file),但问题是最后文件被覆盖并生成损坏的 excel文件(Excel 文件格式和扩展名不匹配)。如何在结尾处创建一个新的 excel 文件(不被覆盖),或者您有没有其他解决方案来不创建损坏的文件?

filenames <- list.files(pattern = '\\.xlsx', full.names = TRUE)

lapply(filenames, function(x) {
  #Read the data
  data <- readxl::read_excel(x)
  #Change the 4th column with filename
  names(data)[4] <- tools::file_path_sans_ext(basename(x))
  #Write the data back
  writexl::write_xlsx(data, x)
})

【问题讨论】:

    标签: r excel xlsx


    【解决方案1】:

    您可以使用tools::file_path_sans_exttools:.file_ext 组合一个新的输出文件名。在下面的代码中,我将后缀_new 附加到文件扩展名之前的文件名中。

    filenames <- list.files(pattern = '\\.xlsx', full.names = TRUE)
    
    lapply(filenames, function(x) {
      #Read the data
      data <- readxl::read_excel(x)
      #Change the 4th column with filename
      y <- tools::file_path_sans_ext(basename(x))
      names(data)[4] <- y
      #Write the data back
      ext <- tools::file_ext(x)
      y <- paste0(y, "_new.", ext)
      writexl::write_xlsx(data, y)
    })
    

    【讨论】:

    • 生成的文件仍然损坏。问题来自我最初的 excel 文件扩展名是 .xls (filenames
    • @Cordyline Function xlsx::write.xlsx 同时写入 xls 和 xlsx 文件。可以试试吗?
    • 函数xlsx::write.xlsx 确实很好用。但是生成的文件已损坏。您可以在 excel 中打开文件,但是您会收到错误消息:Excel 文件格式和扩展名不匹配。如果您想使用readxl::read_excel(.x) 在 R 中读取此文件,则会收到以下错误消息:libxls 错误:无法打开文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2017-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多