通过Coldfusion禁用Excel错误检查

我强制执行了文字前导零的数字。 它运行良好,但它显示的angular落上显示绿色的图标显示错误。 我的问题是,我可以停止或禁用此button不显示在Excel表单上编程。

在Excel表格中,您可以轻松地禁用错误检查,但我希望通过代码

任何帮助将不胜感激

谢谢!

简短的回答:

POI 3.14+支持在单元级别禁止Excel错误检查的 function 。 看下面的细节。 另一个选项是将单元格保留为数字,但应用前导零的掩码,即: SpreadSheetFormatCell(sheet, {dataFormat="00000"}, row, column)

较长的答案:

经过一番阅读后,原来在POI 3.14中join了抑制这个错误的能力。 不幸的是,CF11捆绑了一个旧版本,3.9。 但是,您可以通过在Application.cfc中使用this.javaSettings加载POI 3.14(或更高版本)以及一些java代码来访问较新的function。

开始像往常一样创build电子表格:

 // 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将其读入新的工作簿对象。 工厂支持从物理文件或字节stream加载。 (为了简洁,我将使用字节)。

 // 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"); 

接下来,创build一个范围对象,表示要抑制“数字为文本”错误的单元格。 然后将该范围添加到工作表中被忽略的错误列表。

 // 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();