将 .xlsx 内容显示为 HTML 表格

问题描述 投票:0回答:1

我可以使用

openxlsx
包和 loadWorkbook 函数读取格式化的 .xlsx 文件,并根据需要进一步编辑它。

如何在 Shiny 应用程序中将此数据显示为 HTML 表格?精确的样式并不是非常重要,但保留合并的单元格很重要。

我认为

basictabler
包将是解决方案,因为它支持 HTML 显示并保存到 .xlsx 文件。但是,我找不到如何将数据转换为该包的 BasicTable 对象格式。
理想的解决方案是将单个工作表从 openxlsx 工作簿转换为这个 BasicTable 对象,然后我可以在 Shiny 中使用它。

据我所知,您只能从头开始或从常规数据框对象创建BasicTable,这意味着我必须手动合并所有必需的单元格。

我无法放置 Excel 文件的表示,但我可以用单个合并单元格描绘一个最小的示例。

r excel shiny openxlsx
1个回答
0
投票

你是对的,

openxlsx::loadWorkbook
提供了合并的范围。

首先我们创建一个 XLSX 文件用于演示:

library(openxlsx)

# create XLSX file for illustration
wb <- createWorkbook()
## Add a worksheet
addWorksheet(wb, "Sheet 1")
## write iris dataset
writeData(wb, "Sheet 1", iris)
## Merge cells: Row 2 column C to F (3:6)
mergeCells(wb, "Sheet 1", cols = 2, rows = 3:6)
## Merge cells:Rows 10 to 20 columns B to E (2:5)
mergeCells(wb, "Sheet 1", cols = 2:5, rows = 10:20)
##
saveWorkbook(wb, "mergeCellsExample.xlsx", overwrite = TRUE)

现在让我们像使用它一样加载它,并提取有关合并的信息:

# load workbook
wb <- loadWorkbook("mergeCellsExample.xlsx")
# get merged cells
merges <- wb$worksheets[[1]]$mergeCells
# get excel ranges of the merges
excelRanges <- gsub(".*\"(.+)\".*", "\\1", merges)
# convert them to (rFrom, cFrom, rSpan, cSpan) for usage in 'basictabler'
RCRC <- function(excelRange) {
  cl <- cellranger::as.cell_limits(excelRange)
  list(
    "rFrom" = cl$ul[1],
    "cFrom" = cl$ul[2],
    "rSpan" = cl$lr[1] - cl$ul[1] + 1L,
    "cSpan" = cl$lr[2] - cl$ul[2] + 1L  
  )
}
rcrcList <- lapply(excelRanges, RCRC)

现在,让我们使用 basictabler 包:

## get the dataframe
dat <- read.xlsx("mergeCellsExample.xlsx", sheet = "Sheet 1")

## construct the table
library(basictabler)
tbl <- BasicTable$new()
tbl$addData(dat)

## merge the cells
lapply(rcrcList, function(rcrc) {
  invisible(
    do.call(tbl$mergeCells, rcrc)
  )
})

## show table
tbl$renderTable()

© www.soinside.com 2019 - 2024. All rights reserved.