我有一个 Excel 表,其中添加的背景为红色,更改的背景为黄色,删除的背景为灰色。我希望做的是通读工作表,并根据单元格背景颜色,执行相关的数据库操作。
通常我会将每种类型的操作放在自己的列中,或者添加另一列来确定操作。
我有哪些选项可以获取电子表格对象中返回的“格式”?
谢谢
我有一个 Excel 表,其中添加的背景为红色,更改的背景为黄色,删除的背景为灰色。我希望做的是通读工作表,并根据单元格背景颜色,执行相关的数据库操作。
通常我会将每种类型的操作放在自己的列中,或者添加另一列来确定操作。
我有哪些选项可以获取电子表格对象中返回的“格式”?
谢谢
依靠细胞颜色听起来很脆弱 IMO。IMO 分配一个明确的操作列将是一种更好的方法。
也就是说,可以访问颜色。但是,没有内置的 CF 方法。您必须深入了解基础 POI。首先遍历电子表格中的单元格:
<cfscript>
// get the sheet you want to read
cfSheet = SpreadSheetRead("c:/path/to/somefile.xlsx");
workbook = cfSheet.getWorkBook();
sheetIndex = workbook.getActiveSheetIndex();
sheet = workbook.getSheetAt( sheetIndex );
// process the rows and columns
rows = sheet.rowIterator();
while (rows.hasNext()) {
currentRow = rows.next();
// loop through populated cells in this row
cells = currentRow.cellIterator();
while (cells.hasNext()) {
currentCell = cells.next();
// .... get color
}
}
</cfscript>
然后为每个单元格提取样式颜色。未经测试,但这样的事情应该可以工作。(见XSSFColor)
cellColor = currentCell.getCellStyle().getFillForegroundColorColor();
colorValue = cellColor.getARGBHex();
更新:
正如评论中提到的@Sean, CF9没有上述方法。不幸的是getFillForegroundColorColor()
,getARGBHex()
它是在 3.7 左右引入的,但 CF 与早期版本捆绑在一起:3.5(我认为)。因此,您必须改用索引颜色方法(或升级 POI jar)。
// only create once
colors = createObject("java", "org.apache.poi.ss.usermodel.IndexedColors");
//....
cellColor = currentCell.getCellStyle().getFillForegroundColor();
if (cellColor == colors.RED.getIndex()) {
WriteDump("This cell is RED. Do something...");
}