[英]Apache POI: How to use addIgnoredErrors(…) functionality in SXSSFSheet
XSSFSheet
( Javadoc XSSFSheet )具有方法addIgnoredErrors(...)
。 SXSSFSheet
( Javadoc SXSSFSheet )沒有此方法。
如何忽略基於SXSSFSheet
的工作表中的錯誤?
我不能使用XSSFSheet
,因為我有105,000行,而XSSFSheet
會消耗內存。
我在表中放置了一個只能由數字組成的文本字段。 Shitty Excel將顯示一個警告Number stored as text
該單元格的Number stored as text
。 即使我將CellType
設置為STRING
並將其格式設置為Text "@"
,無論順序如何。
最小的可運行演示:
public void run() {
try {
final SXSSFWorkbook workbook = new SXSSFWorkbook(-1);
final DataFormat dataFormat = workbook.createDataFormat();
CellStyle styleDef;
styleDef = workbook.createCellStyle();
styleDef.setDataFormat(dataFormat.getFormat("@"));
final SXSSFSheet sheet = workbook.createSheet();
final SXSSFRow row = sheet.createRow(0);
final SXSSFCell cell = row.createCell(0);
final String text = "123";
cell.setCellType(CellType.STRING);
cell.setCellValue(text);
cell.setCellStyle(styleDef);
workbook.write(new FileOutputStream("test.xlsx"));
workbook.close();
// Hint from Axel Richter, to make it a full working example
workbook.dispose();
} catch (final Exception e) {
e.printStackTrace();
}
}
該SXSSFSheet有一個字段XSSFSheet _sh
內部。 因此,我們可以使用反射來獲取並使用它。
以下示例將
<ignoredErrors>
<ignoredError sqref="A1:A100" numberStoredAsText="true"/>
</ignoredErrors>
在/xl/worksheets/sheet1.xml
,因此Excel
將忽略范圍A1:A100
的錯誤numberStoredAsText
。
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.streaming.*;
import java.lang.reflect.Field;
public class CreateExcelSXSSFWorkbookNumberAsText {
public static void main(String[] args) throws Exception {
SXSSFWorkbook workbook = new SXSSFWorkbook();
DataFormat dataFormat = workbook.createDataFormat();
CellStyle styleDef;
styleDef = workbook.createCellStyle();
styleDef.setDataFormat(dataFormat.getFormat("@"));
//styleDef.setQuotePrefixed(true);
SXSSFSheet sheet = workbook.createSheet();
Field _sh = SXSSFSheet.class.getDeclaredField("_sh");
_sh.setAccessible(true);
XSSFSheet xssfsheet = (XSSFSheet)_sh.get(sheet);
xssfsheet.addIgnoredErrors(new CellRangeAddress(0, 99, 0, 0), IgnoredErrorType.NUMBER_STORED_AS_TEXT);
for (int r = 0; r < 100; r++) {
SXSSFRow row = sheet.createRow(r);
SXSSFCell cell = row.createCell(0);
String text = "" + new java.util.Random().nextInt();
cell.setCellValue(text);
cell.setCellStyle(styleDef);
}
workbook.write(new FileOutputStream("test.xlsx"));
workbook.close();
workbook.dispose();
}
}
順便說一句:您應該使用SXSSFWorkbook.dispose()擺脫臨時文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.