我强制执行文本前导零的数字。 它运行良好但是在点击它时显示角落的绿色图标显示错误。 我的问题是如何停止或禁用此按钮不以编程方式显示在Excel工作表上。
在Excel工作表中,您可以轻松禁用错误检查,但我希望通过代码
任何帮助将不胜感激
谢谢!
答案 0 :(得分:2)
简答:
Excel's error checking支持在单元格级别禁止POI 3.14+的功能。见下面的细节。另一种选择是将单元格保留为数字,但应用带前导零的掩码,即:SpreadSheetFormatCell(sheet, {dataFormat="00000"}, row, column)
。
更长的回答:
经过一些阅读后,结果表明在POI 3.14中添加了抑制此错误的能力。不幸的是,CF11捆绑了旧版本3.9。但是,您可以通过在Application.cfc中使用this.javaSettings加载POI 3.14(或更高版本)以及一些Java代码来访问更新的功能。
首先像往常一样创建电子表格:
// format a few cells as text, then add values with leading zero
cfSheet = SpreadSheetNew("Test", true);
SpreadSheetFormatCell(cfSheet, {dataFormat="@"}, 1, 1);
SpreadSheetSetCellValue(cfSheet, "01234", 1, 1);
SpreadSheetFormatCell(cfSheet, {dataFormat="@"}, 1, 2);
SpreadSheetSetCellValue(cfSheet, "05678", 1, 2);
为了使用较新的类操作电子表格,必须使用POI WorkbookFactory将其读入新的Workbook对象。工厂支持从物理文件或字节流加载。 (为简洁起见,我将使用字节)。
// load workbook from byte array
bytes = SpreadsheetReadBinary( cfSheet );
stream = createObject("java", "java.io.ByteArrayInputStream").init(bytes);
factory = createObject("java", "org.apache.poi.ss.usermodel.WorkbookFactory");
wb = factory.create(stream);
// grab reference to our worksheet
jSheet = wb.getSheet("Test");
接下来,创建一个范围对象,表示要抑制“数字为文本”错误的单元格。然后将范围添加到工作表中的ignored errors列表中。
// Create range of cells containing numbers as text
CellRange = createObject("java", "org.apache.poi.ss.util.CellRangeAddress");
rangeToModify = CellRange.valueOf("A1:A2");
// Flag the range to ignore "number as text" error
IgnoreTypes = createObject("java", "org.apache.poi.ss.usermodel.IgnoredErrorType");
jSheet.addIgnoredErrors(rangeToModify, [ IgnoreTypes.NUMBER_STORED_AS_TEXT] );
最后,将更新的工作簿保存到文件中:
// Save to disk
fos = createObject("java", "java.io.FileOutputStream").init("c:/path/uniqueName.xlsx");
wb.write(fos);
fos.close();