Rstudio - RDCOMCLIENT将数据框写入excel会生成特殊字符

jm81lzqq  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(133)

当通过asCOMArray将一些 Dataframe 写入excel时,大部分数据都很好。但由于编码问题,一些字符如“-”被转换为:“-;“é”更改为:“é”
下面是代码示例:

xlApp <- COMCreate("Excel.Application")
xlApp[["Visible"]] <- TRUE
xlApp[["DisplayAlerts"]] <- F
xlApp[["EnableEvents"]] <- F

#add new wb
wb <- xlApp$Workbooks()$Add()
#rename first active sheet
sheet <- xlApp$ActiveSheet()
wbActiveNum <- xlApp$ActiveSheet()[['Index']]
wbSheet <- xlApp$Worksheets()[[wbActiveNum]]
wbSheet[['Name']] <- 'Data'
#save file
Filenm <- paste0(Output_path,"XXX File as Of ",format(Sys.Date() , "%B-%d-%Y"), " .xlsb")
Filenm <- suppressWarnings(normalizePath(Filenm))
wb$SaveAs(Filename = Filenm ,FileFormat = 50)
Sys.sleep(2)

sheet <- wb$Worksheets("Data")
I1 <- as.numeric(ncol(DF))%%26                                     
I2 <- round(as.numeric(ncol(DF))/26)                             
LC <- toupper(paste0(letters[as.numeric(I2)], letters[as.numeric(I1)]))
SC <- toupper(letters[1])
range<-sheet$Range(paste0(SC,"14:",LC,nrow(DF)+13))
range[["Value"]] <- asCOMArray(DF)
try( range[["Borders"]][["ColorIndex"]] <- 1 , silent = T )
Font <- range$Font()
Font[["Size"]] <- 9
Font[["Name"]] <- "Calibri"
EntCol <-range$EntireColumn()
EntCol$AutoFit()

现在“DF”是我的 Dataframe ,它可以成功粘贴,但是在不同的地方生成特殊字符,如上所示。
是否有办法将编码更改为“latin 9”或“latin 1”以帮助克服这些特殊字符的生成。
RDCOMclient是否可以在将数据写入excel之前更改编码类型。
(以上是一个随机代码块,用于将数据写入excel工作表)

yhqotfr8

yhqotfr81#

你必须将文本从UFT-8转换为latin 1。我已经能够在Excel文件中正确地编写特殊字符,代码如下:

library(RDCOMClient)
xlApp <- COMCreate("Excel.Application")
xlApp[["Visible"]] <- TRUE
xlApp[["DisplayAlerts"]] <- FALSE
xlApp[["EnableEvents"]] <- FALSE

wb <- xlApp$Workbooks()$Add()
sheet <- xlApp$ActiveSheet()
wbActiveNum <- xlApp$ActiveSheet()[['Index']]
wbSheet <- xlApp$Worksheets()[[wbActiveNum]]
wbSheet[['Name']] <- 'Data'

y <- c("é", "ê")
y <- iconv(y, from = "UTF-8", to = "latin1")
x <- c("ô", "û")
x <- iconv(x, from = "UTF-8", to = "latin1")

DF <- data.frame(y = y, x = x)

sheet <- wb$Worksheets("Data")
range <- sheet$Range("A1:B2")
range[["Value"]] <- asCOMArray(DF)

相关问题