Tag: java

将SXSSFWorkbook保存为blob的最佳方法是什么?

我正在使用Apache POI SXSSFWorkbook生成一个.xlsx excel电子表格,但不是下载它,我需要将该文件保存到一个blob。 我也需要这个能够扩展,所以如果我有60万以上的logging放入文件,我需要避免内存不足的错误。 这是代码 SXSSFWorkbook workbook = new SXSSFWorkbook(100); addContent(); 通常当输出到一个文件,我做类似的东西 OutputStream output = response.getOutputStream(); workbook.write(output); 但在这种情况下,我不需要它去到一个文件,只是到数据库的blob,除了没有办法将SXSSFWorkbook保存到一个blob。 我可以将工作簿保存到OutputStream中,并尝试将其保存到Blob中,但通常需要使用inputStream。 是否有一个实用程序将outputStream转换为inputStream?

使用Apache POI库检索excel中属性(列)的唯一值列表

我正在阅读一个excel文件,其中包含数百万个数据集logging,用于我的项目工作。 我的问题是,如何填充列(或属性)的每个分类variables可以具有的唯一值列表。 POI库中是否有预定义的函数可以完成这个任务,或者遗漏的唯一选项是遍历每一条logging,然后与已经存在的logging进行比较以确定新的logging。 谢谢。

我得到的公式,而不是细胞内容

我有这个代码: String fname = "C:/Users/slim/Desktop/xlsxFiles/plan.xlsx"; InputStream inp = new FileInputStream(fname); Workbook wb = new XSSFWorkbook(inp); Sheet sheet = wb.getSheetAt(0); for (Row row : sheet) { System.out.println(row.getCell(0)); System.out.println(row.getCell(11)); } 我面对的问题似乎有点奇怪,因为这是我第一次处理POI。 cell 0的内容是一个date,我完全没有问题,但是cell 11的内容应该是一个数字,它返回用于获取内容的公式。 这是一个示例输出: 31-Aug-2013 L3/5 30-Sep-2013 L3*2/5 31-Oct-2013 L3*3/5 30-Nov-2013 L3*4/5 31-Dec-2013 L3 31-Jan-2014 P8 28-Feb-2014 P9 31-Mar-2014 P10 等等… 我需要做的是显示单元格的实际内容,而不是公式。 我确信我错过了一些小事,但作为一个完整的初学者,我无法发现它。

POI无法打开在Excel中打开的工作簿

当我尝试在POI中打开一个.xlsx文件时,出现exception: java.lang.IllegalArgumentException: The supplied POIFSFileSystem does not contain a BIFF8 'Workbook' entry. Is it really an excel file? at org.apache.poi.hssf.usermodel.HSSFWorkbook.getWorkbookDirEntryName(HSSFWorkbook.java:223) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:245) at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:188) 我注意到代码正在考虑它.xls文件,即使名称是.xlsx,我正在使用WorkbookFactory.create(fileInputStream); 打开文件。 我尝试将文件重命名为.zip,并在WinZip中打开,我得到一个错误 – 无效的zip文件。 该文件在Excel中打开,如果我保存它(不做一个更改),然后它在POI中正确打开。

Java只打印最后一个数据单元

我正在尝试从csv读取内容并将其打印到excel文件中。 到目前为止,我有这个,但是它只打印出csv的最后一个值到excel文件的第一个单元格中。 我尝试使用列和行的增量,但我得到一个空指针exception错误。 int i=0; int j=0; int k=0; int row=68; int column=0; String [] part={"052","064"}; try{ //InputStream inp = new FileInputStream(); //Workbook wb = WorkbookFactory.create(inp); Workbook wb = WorkbookFactory.create(new File("30_results_w_graphs.xls")); for (k=0; k<part.length; k++) { Sheet sheet = wb.getSheet(part[k]); Cell cell = null; Scanner scanner = new Scanner(new File(part[k]+".csv")); scanner.useDelimiter(","); while(scanner.hasNext()){ cell=sheet.getRow(row).getCell(column); cell.setCellValue(scanner.next()); //row++; […]

在打开使用Java创build的Excel电子表格时出现input/输出错误

我已经使用NetBeans 7.4实现了以下Java类,以便使用用户提供的数据创buildExcel Spreadsheet: package registration; import java.io.*; import java.io.BufferedReader; import java.io.IOException; import java.io.FileOutputStream; import java.io.InputStreamReader; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFCell; import java.util.Scanner; // program uses class Scanner /** * * @author user */ public class Registration { /** * @param args the command line arguments */ /** Now a recursive class**/ public […]

使用POI事件模型将表单写入文本文件

我正在使用XLSX2CSV示例来parsing工作簿中的较大的工作表。 由于我只需要输出特定工作表的数据,因此我在工艺方法中添加了if语句以testing特定工作表。 当条件满足时,我继续这个过程。 public void process() throws IOException, OpenXML4JException, ParserConfigurationException, SAXException { ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(this.xlsxPackage); XSSFReader xssfReader = new XSSFReader(this.xlsxPackage); StylesTable styles = xssfReader.getStylesTable(); XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData(); while (iter.hasNext()) { InputStream stream = iter.next(); String sheetName = iter.getSheetName(); if (sheetName.equals("SHEET1")||sheetName.equals("SHEET2")||sheetName.equals("SHEET3")||sheetName.equals("SHEET4")||sheetName.equals("SHEET5")){ processSheet(styles, strings, stream); try { System.setOut(new PrintStream( new FileOutputStream("C:\\Users\\edennis.AD\\Desktop\\test\\"+sheetName+".txt"))); } catch […]

无法dynamic设置HSSFCell对象的值

我正试图使用​​Apache POI将数据从我的jsp导出到excel。 我需要的列数取决于两个参数,因此,我通过查询获取它。 对于EX:如果需要的dynamic列数= 3,那么输出应该是这样的。 A | B | DH1 | DH2 | DH3 | C 这里A,B,C =静态列标题。 DH =dynamic列标题(从查询中提取) 为此,我首先设置A,B,C,然后find所需的DH列数。 然后我生成DH列。 之后,我在每个DH列中找出需要的值,将该值存入Arraylist,然后遍历Arraylist并设置值。 这里的代码 HSSFCell c1= row.createCell(0); HSSFCell c2= row.createCell(1); HSSFCell cellObject = null; oRecordMetaInfo = getNoofDynamicColumns(); NoofColumns = oRecordMetaInfo.getRecordCount(); for(int i = 2; i < NoofColumns + 2; i++) { cellObject = row.createCell((int) i); […]

Excel Apache POI打印问题

我正在使用Apache POI来生成dynamicExcel。 我有彩色细胞。 对于我使用的颜色 headerCellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index); headerCellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND); Excel生成完美的颜色,但是当我打印这个Excel背景颜色来与虚线的阴影。 我试过并检查以下内容: 它不是打印机问题 当我将生成的Excel的内容复制到新的Excel中。 它的印刷来完美。 所以在代码或POI中一定有错误。

使用API​​将Excel列转换为Java

我必须创build一个计算GPA的程序,使用读取xlsx excel文件的apache poi。 它压缩了220行和4列,如 Course Number Course Name Credit Hours Course Multipler 110 Eng 1 CP 5.0 1.0 还有220个其他课程。 不过,我能够使用cell.getStringCellValue和cell.getNumericCellValue打印这些数据,但是我无法将这些打印数据存入每个数组中。 我想要创build一个名为courseNumList的数组,并将courseNumList [0]放在第一个课程编号,第二个课程编号在courseNumList [1] ..中。 我想创build4个数组,但是什么是一个好方法? private static ArrayList<Object> c = new ArrayList <Object>(); public static void readXLSXFile() throws IOException { InputStream ExcelFileToRead = new FileInputStream("C:/Users/14KimTa/Desktop/Downloads/Course_List.xlsx"); XSSFWorkbook wb = new XSSFWorkbook(ExcelFileToRead); XSSFWorkbook test = new XSSFWorkbook(); […]