我正在使用$full_array = session('products');
$stores = session('stores');
for($i=0; $i<=count($stores); $i++)
{
foreach($full_array as $arr)
{
//dd($stores[$i]);
//dd($arr['store']);
if($arr['store'] === $stores[$i])
{
session()->push($stores[$i], $arr['product']);
}
}
}
包创建一个复杂格式的Excel工作表。
问题是当我已经格式化了一个单元格并希望在其上添加一些内容时 - 格式化将恢复为默认值,除了我要添加的新内容。
一种解决方案是指定每种不同的案例并对其应用完整的格式。特定案件的数量可能会因一张大纸张而失控。
我猜想必须要一步一步地添加格式,但在文档中还没有找到任何关于它的内容。
我目前的做事方式的可重复的例子:
Undefined offset: 4
最后,一些以前的红色字体又变黑了。
聚苯乙烯。我尝试过其他套餐,但想坚持使用xlsx
。
require(xlsx)
# Some random data
n <- 20L
set.seed(1L)
df <- data.frame(species = sample(c("Cat", "Dog", "Unkown"), n, replace = TRUE),
speed = abs(rnorm(n)) * 20L)
# Create workbook
dfwb <- createWorkbook(type = "xlsx")
sheet <- createSheet(dfwb, sheetName = "ani")
addDataFrame(df, sheet, startRow = 1, startColumn = 1, row.names = FALSE)
# Change text of Cat to "red"
row <- getRows(sheet, rowIndex = which(df[, "species"] == "Cat") + 1L)
cel <- getCells(row, colIndex = 1)
redh_style <- CellStyle(dfwb) + Font(dfwb, color = "red")
for (i in names(cel)) {
setCellStyle(cel[[i]], redh_style)
}
# Highlight all rows where speed exceeds 18
row <- getRows(sheet, rowIndex = which(df[, "speed"] > 18) + 1L)
cel <- getCells(row, colIndex = 1:2)
high_style <- CellStyle(dfwb) + Fill(foregroundColor="#E2E6EB")
for (i in names(cel)) {
setCellStyle(cel[[i]], high_style)
}
# Save
setwd("c:/temp/csvm/")
saveWorkbook(dfwb, "so_cat.xlsx")
不允许直接从R进行某种格式化,并且在xlsx
运行时遇到技术问题。
答案 0 :(得分:1)
这是一种方法。主要思想是为每个单元格构建一个并行的格式列表,其中每个列表元素都是一个单元格。这允许您根据需要附加格式属性。最后,我们将这个格式列表应用于每个单元格。
首先,我们设置一个空白列表:
# Set up blank list of formats
fmts <- list()
现在,我们根据第一个标准进行格式化,将font属性添加到所选单元格的fmts
列表中:
# Change text of Cat to "red"
row <- getRows(sheet, rowIndex = which(df[, "species"] == "Cat") + 1L)
cel <- getCells(row, colIndex = 1)
for (i in names(cel)) {
if (i %in% names(fmts)) {
fmts[[i]] <- c(fmts[[i]], list(Font(dfwb, color = "red")))
} else {
fmts[[i]] <- list(CellStyle(dfwb), Font(dfwb, color = "red"))
}
}
接下来,做背景:
# Highlight all rows where speed exceeds 18
row <- getRows(sheet, rowIndex = which(df[, "speed"] > 18) + 1L)
cel <- getCells(row, colIndex = 1:2)
for (i in names(cel)) {
if (i %in% names(fmts)) {
fmts[[i]] <- c(fmts[[i]], list(Fill(foregroundColor="#E2E6EB")))
} else {
fmts[[i]] <- list(CellStyle(dfwb), Fill(foregroundColor="#E2E6EB"))
}
}
当我们检查fmts
时,我们注意到一些元素只有两个项目(基本单元格样式,加上字体或背景),而其他元素有三个(基本单元格样式,字体和背景) ):
str(fmts, m = 1)
# List of 16
# $ 2.1 :List of 3
# $ 6.1 :List of 3
# $ 11.1:List of 2
# $ 12.1:List of 3
# $ 13.1:List of 2
# $ 2.2 :List of 2
# $ 5.1 :List of 2
# $ 5.2 :List of 2
# $ 6.2 :List of 2
# $ 9.1 :List of 2
# $ 9.2 :List of 2
# $ 12.2:List of 2
# $ 15.1:List of 2
# $ 15.2:List of 2
# $ 19.1:List of 2
# $ 19.2:List of 2
最后,我们遍历fmts
并应用样式。 Reduce
函数非常有用:
# Apply formatting
for (i in names(fmts)) {
idx <- as.numeric(unlist(strsplit(i, "\\.")))
cel <- getCells(getRows(sheet, rowIndex = idx[1]), colIndex = idx[2])
setCellStyle(cel[[i]],
Reduce(`+.CellStyle`, fmts[[i]])
)
}
输出: