XLConnect: ошибка обновления saveworkbook - PullRequest
0 голосов
/ 28 августа 2018

saveWorkbook() функция в XLConnect сохраняет рабочую книгу, а изменения и обновленные вычисления видны в файле excel, но не в R (потому что она имеет формулу, не принятую в apache poi)

Однако для просмотра ячейки я сохраняю файл на диск и вызываю его с помощью другой функции. Но когда я снова вызываю тот же файл, вычисленные поля все еще показывают старые значения. Я не хочу сохранять файл excel каждый раз, когда вносю изменения в книгу.

Известен ли вам обходной путь, позволяющий вызывать новые значения без сохранения Excel вручную?

Код -

options(java.parameters = "-Xmx1024m")
library(rJava)
library(XLConnect)
wb = loadWorkbook(file.choose(), create = TRUE)
readWorksheet(wb,16, region = 'D25:D26')
writeWorksheet(wb,-.45,sheet = 16,startRow = 25,startCol = 4)
setForceFormulaRecalculation(wb,sheet = 16, TRUE)
saveWorkbook(wb)
detach("package:XLConnect", unload=TRUE)
detach("package:XLConnectJars", unload=TRUE)
library(xlsx)
y = read.xlsx(file.choose(), sheetIndex = 16)

Таким образом, файл Excel в системе показывает изменения, соответствующие новому значению -.45, но когда я снова читаю файл, вычисленные значения являются старыми, а не новыми. Это исправится, если я сохраню файл вручную.

1 Ответ

0 голосов
/ 19 октября 2018

Я считаю, что команда, которую вы используете, правильная, но, возможно, некоторые небольшие изменения сделают эту работу.

Я думаю, что вы могли бы попытаться поместить необходимые вычисления в другой лист в Excel и рассматривать введенные вами данные как зависимость для этих вычислений в новом листе.

Тогда прочитайте это как новую рабочую книгу и назовите новый лист. Я думаю, что вы получите тот результат, который вам нужен.

setForceFormulaRecalculation(wb, sheet = "*", TRUE)

Я бы использовал эту команду, чтобы вместо этого пересчитать все листы.

Надеюсь, это поможет!

...