我正试图通过bright使用openxlsx包编写一个相当大的数据框架(超过200列和6000行),其中包括希伯来语字符
出于某种原因,当我下载文件时,我得到了一个损坏的excel文件,当我试图打开它时,我会得到一个
excel发现无法读取的内容您想恢复此工作簿的内容吗
然后:
excel能够通过修复或删除无法读取的内容来打开文件
一旦我打开文件,所有的希伯来文字符都不见了
试图重现这个问题时,我发现如果我尝试写一个较小的数据帧,例如[100:100],它是有效的,希伯来语就在那里,但一旦我把数据帧调大,它就不起作用了
这是我在下面的测试代码中使用的文件的链接
这是我正在使用的代码:
服务器.R
library(shiny)
library(openxlsx)
shinyServer(function(input, output) {
datasetInput <- reactive({
file_1 <- read.csv("../file1.txt", header=T, stringsAsFactors =F)
file1<-file_1[1:200,1:200] ##if i place here [100:100] it works fine!
return(file1)
})
output$table <- renderTable({
datasetInput()
})
output$downloadData <- downloadHandler(
filename = function() { paste("download", "xlsx", sep='.') },
content = function(file){
fname <- paste(file,"xlsx",sep=".")
wb <- createWorkbook()
print(class(datasetInput()))
addWorksheet(wb = wb, sheetName = "Sheet 1", gridLines = FALSE)
writeDataTable(wb = wb, sheet = 1, x = datasetInput())
saveWorkbook(wb, file, overwrite = TRUE)
}
)
})
ui.R
shinyUI(pageWithSidebar(
headerPanel('Download Example'),
sidebarPanel(
downloadButton('downloadData', 'Download')
),
mainPanel(
tableOutput('table')
)
))
多亏了这个包的创建者Alexander Walker,问题得到了解决:
问题似乎是由于其中一个字符串"\b"中的转义符引起的
> x <- read.csv("file1.txt")
> x[150,44]
[1] ÷øéîéðåìåâéä áäúîçåú áîãò ôåøðæé - îåñîê b
修复方法是:
x <- read.csv("file1.txt", stringsAsFactors = FALSE)
wb <- createWorkbook()
addWorksheet(wb, "Sheet 1")
is_character_col <- which(sapply(x, class) %in% "character")
for(i in is_character_col){
x[[i]] <- gsub("b", "", x[[i]], fixed = TRUE)
}
writeDataTable(wb, 1, x)
saveWorkbook(wb, "hopefully_fixed.xlsx")