这是一种内联w/将大型ResultSet写入文件但有问题的文件是Excel文件.
我正在使用Apache POI库编写一个Excel文件,其中包含从ResultSet对象检索到的大型数据集.数据范围从几千条记录到大约一百万条; 不确定这如何转换为Excel格式的文件系统字节.
以下是我编写的测试代码,用于检查编写如此大的结果集所花费的时间以及CPU和内存的性能影响.
protected void writeResultsetToExcelFile(ResultSet rs, int numSheets, String fileNameAndPath) throws Exception {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fileNameAndPath));
int numColumns = rs.getMetaData().getColumnCount();
Workbook wb = ExcelFileUtil.createExcelWorkBook(true, numSheets);
Row heading = wb.getSheetAt(0).createRow(1);
ResultSetMetaData rsmd = rs.getMetaData();
for(int x = 0; x < numColumns; x++) {
Cell cell = heading.createCell(x+1);
cell.setCellValue(rsmd.getColumnLabel(x+1));
}
int rowNumber = 2;
int sheetNumber = 0;
while(rs.next()) {
if(rowNumber == 65001) {
log("Sheet " + sheetNumber + "written; moving onto to sheet …Run Code Online (Sandbox Code Playgroud) 我正在使用Apache POI将值输入到电子表格中.这些值有换行符,我能够成功使用此代码:
CellStyle style = cell.getCellStyle()
style.setWrapText(true)
cell.setCellStyle(style)
Run Code Online (Sandbox Code Playgroud)
不幸的是,虽然文本正确包装,但行的高度并不总是足以显示内容.如何确保我的行总是正确的高度?
我正在寻找一个简单的示例代码或完整的教程如何docx使用Apache POI及其底层创建文件openxml4j.
我尝试下面的代码(有很多从内容的帮助,协助,感谢Eclipse的!),但代码不能正常工作.
String tmpPathname = aFilename + ".docx";
File tmpFile = new File(tmpPathname);
ZipPackage tmpPackage = (ZipPackage) OPCPackage.create(tmpPathname);
PackagePartName tmpFirstPartName = PackagingURIHelper.createPartName("/FirstPart");
PackagePart tmpFirstPart = tmpPackage.createPart(tmpFirstPartName, "ISO-8859-1");
XWPFDocument tmpDocument = new XWPFDocument(tmpPackage); //Exception
XWPFParagraph tmpParagraph = tmpDocument.createParagraph();
XWPFRun tmpRun = tmpParagraph.createRun();
tmpRun.setText("LALALALAALALAAAA");
tmpRun.setFontSize(18);
tmpPackage.save(tmpFile);
Run Code Online (Sandbox Code Playgroud)
抛出的异常如下:
Exception in thread "main" java.lang.NullPointerException
at org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:235)
at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:196)
at org.apache.poi.xwpf.usermodel.XWPFDocument.<init>(XWPFDocument.java:94)
at DocGenerator.makeDocxWithPoi(DocGenerator.java:64)
at DocGenerator.main(DocGenerator.java:50)
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决(非常简单)的要求吗?
我使用Apache POI填充Excel文件的单元格,文档中有很多公式单元格.但是,当我在Excel中打开文档时,它们的值不会刷新.
我的理解是我需要使用a FormulaEvaluator刷新公式单元格.但是,有没有办法一次更新所有公式单元格?它们中有很多,虽然制作详尽的清单并不是不可能的,但它肯定不是我非常愿意做的事情.
我正在尝试将多行文本写入excel单元格.
cell.setCellValue("line1 \n line2");
Run Code Online (Sandbox Code Playgroud)
但是当我打开文档时,我只看到一行,直到我双击它进行编辑,然后它变成两行.为什么会这样?谢谢
我正在使用POI HSSF API进行Java中的excel操作.我在我的一个excel单元格中有一个日期值"8/1/2009",当我尝试使用HSSF API读取该值时,它会将单元格类型检测为Numeric并返回我的日期的"Double"值.请参阅以下示例代码:
cell = row.getCell(); // date in the cell '8/1/2009'
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_STRING:
cellValue = cell.getRichStringCellValue().getString();
break;
case HSSFCell.CELL_TYPE_NUMERIC:
cellValue = new Double(cell.getNumericCellValue()).toString();
break;
default:
}
Run Code Online (Sandbox Code Playgroud)
Cell.getCellType()返回NUMERIC_TYPE,因此此代码将日期转换为double!:(
有没有办法在HSSF POI中读取日期!
我正在使用Apache POi HSSF库将信息导入我的应用程序.问题是文件有一些额外/空行需要在解析之前先删除.
没有HSSFSheet.removeRow( int rowNum )方法.只有removeRow( HSSFRow row ).这个问题是无法删除空行.例如:
sheet.removeRow( sheet.getRow(rowNum) );
Run Code Online (Sandbox Code Playgroud)
在空行上给出NullPointerException,因为getRow()返回null.另外,正如我在论坛上看到的那样,removeRow()只删除单元格内容,但行仍然是空行.
有没有一种方法可以删除行(空或不)而不创建一个没有我要删除的行的全新工作表?
我一遍又一遍地扫描这个论坛并尝试了这里提到的每一种方法,仍然无法让Apache POI更改以填充我的Excel文档的背景颜色.
这是我的代码:
errorOccured = true;
XSSFCellStyle cs = workbook.createCellStyle();
cs.setFillBackgroundColor(IndexedColors.RED.getIndex());
row.getCell(0).setCellStyle(cs);
Run Code Online (Sandbox Code Playgroud)
你知道为什么这不起作用吗?什么是row.getCell(0)充满红色(背景色)的正确方法?
谢谢!
我正在使用以下jar文件:
dom4j-1.6.1.jar
poi-3.9-20121203.jar
poi-ooxml-3.9-20121203.jar
poi-ooxml-schemas-3.9-20121203.jar
xmlbeans-2.3.0.jar
Run Code Online (Sandbox Code Playgroud)
码:
package ExcelTest;
import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class Test
{
public static void main(String[] args)
{
try
{
FileInputStream file = new FileInputStream(new File("G:\\Selenium Jar Files\\TestData\\Data.xls"));
//Create Workbook instance holding reference to .xlsx file
XSSFWorkbook workbook = new XSSFWorkbook(file);
//Get first/desired sheet from the workbook
XSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows one by one
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{ …Run Code Online (Sandbox Code Playgroud) 我能够将单元格格式化为Dates,但我无法将单元格格式化为货币...任何人都有一个如何创建样式以使其工作的示例?我下面的代码显示了我正在创建的样式... styleDateFormat的工作方式类似于冠军,而styleCurrencyFormat对单元格没有影响.
private HSSFWorkbook wb;
private HSSFCellStyle styleDateFormat = null;
private HSSFCellStyle styleCurrencyFormat = null;
Run Code Online (Sandbox Code Playgroud)
......
public CouponicsReportBean(){
wb = new HSSFWorkbook();
InitializeFonts();
}
public void InitializeFonts()
{
styleDateFormat = wb.createCellStyle();
styleDateFormat.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy"));
styleCurrencyFormat = wb.createCellStyle();
styleCurrencyFormat.setDataFormat(HSSFDataFormat.getBuiltinFormat("$#,##0.00"));
}
Run Code Online (Sandbox Code Playgroud)