Tag: xssf

无法使用Apache POI读取Excel 2010文件。 第一行数是-1

我正在用Apache POI API(当前版本3-10-FINAL)来testing这个testing文件。 以下testing代码 import java.io.FileInputStream; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelTest { public static void main(String[] args) throws Exception { String filename = "testfile.xlsx"; XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(filename)); XSSFSheet sheet = wb.getSheetAt(0); System.out.println(sheet.getFirstRowNum()); } } 导致第一行数为-1(现有行返回为空)。 testing文件是由Excel 2010创build的(我无法控制该部分),可以使用Excel进行读取而不出现任何警告或问题。 如果我用我的Excel版本(2013)打开并保存文件,可以按预期完美地读取文件。 任何提示为什么我不能读取原始文件或我怎么能高度赞赏。

POI-XSSF:从公式单元格caching值中读取格式化的值

在我的Excel表中,许多单元格都包含公式,我不想在使用Apache POI读取excel时重新计算这些公式。 我这样做的方式: if(cell.getCellType() == XSSFCell.CELL_TYPE_FORMULA) { //System.out.println("Formula is " + cell.getCellFormula()); switch(cell.getCachedFormulaResultType()) { case XSSFCell.CELL_TYPE_NUMERIC: System.out.print(cell.getNumericCellValue() +" "); break; case XSSFCell.CELL_TYPE_STRING: System.out.print(cell.getRichStringCellValue()+" "); break; } } 这有助于我获得细胞的原始价值。 例如,如果单元格的值为19.5%,则会给我0.195456。 我想获得格式化的值。 一种获得格式化值的方法是: DataFormatter formatter = new DataFormatter(); System.out.print(formatter.formatCellValue(cell)); 这适用于普通的单元格,但对于具有公式的单元格,这实际上是获取公式string并显示它,即它不会获取caching的值并对其进行格式化,而只是返回公式string。 有没有办法从CELL_TYPE_FORMULA中检索后格式化一个值

不能从excel文件读取最后一列数据

我正在从Excel文件中读取数据,以便在该列中生成工资代码empcode,emp_name,working_days,overtime_hour从excel文件读取数据时我只读第一列三列意味着我只读工作日我无法读取加class时间,请提出build议我错了,我尝试了下面的代码 public class csv_Upload extends JFrame implements ActionListener { public static JFrame f; JPanel panel; Connection con = null; JButton b1,b2,b3,b4; int Status=0; JTextField txt1; int company_id1=0; JLabel l1; Font g,g1; JFileChooser fc; JTextArea log; File file1 ; String str; JComboBox jb1; public csv_Upload() { panel=(JPanel)getContentPane(); panel.setLayout(null); g=new Font("Georgia",Font.BOLD,22); g1=new Font("Georgia",Font.BOLD,15); panel.setBackground(new java.awt.Color(204, 230 , […]

结果地址使用XSSF的Excel表单中的空单元格

我正在阅读使用POI的XSSF的Excel工作表。 Excel工作表拥有数千行用户信息,如用户名,地址,年龄,部门等 我可以读取和写入Excel工作表,但我想find空/空单元格的地址,并希望打印它作为结果在另一个工作表 示例结果我想要的是: Empty cell : C5 Empty cell : E7 Empty cell : H8 感谢和欣赏的讨论和答复。

将Excel信息添加到JTable,而不是创build新的行? (.xlsx)(JAVA)

我正在使用Apache POI,并试图从Excel工作簿中获取信息(了解这是一个.xlsx文件,我使用POI中的XSSF),并将其显示到一个JTable上。 但是,我看到这不是创造新的专栏。 我已经注意到,当我将它存储到新的向量中,创build一个向量时,我认为它并没有为它遍历的每一行创build一个新的向量。 我将如何存储这些信息? 我想我将不得不存储vector,datatemp,然后清除它,每次find一个新的行,并将其添加到数据向量。 但是,我将如何做到这一点? 我在正确的轨道上? 图片:(不知道我是否被允许发布这个由于没有10代表,但如果不是,请删除) package table_testing_broken_up; import java.awt.BorderLayout; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Iterator; import java.util.Vector; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; 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 pull_information extends JFrame { private static Vector dataTemp = new Vector(); private […]

我怎样才能释放XSSFWorkbook所拥有的内存?

我已经写了一些Java代码,从三个电子表格中获取信息,并在具有4GB内存的计算机上生成大型电子表格(10列,26,950行)。 它正在崩溃,因为它正在生成电子表格(内存不足),但通过重写代码来一次读取100行数据块的大型电子表格,我已经设法达到了它正在写输出文件因为它击中了内存不足的错误。 所以我想如果我可以释放三个XSSF工作簿所拥有的内存,它可能会给我足够的内存来完成输出文件的写入,但是看起来并不是close()指令。 我已经尝试将工作簿设置为空,但我不相信释放任何内存。 有谁知道closuresXSSF工作簿并回收所需内存的“正确”方法? 我正在运行Java 1.8.0_25。

阅读第一行后如何中断POIstream媒体阅读器?

我需要find一种方法来在第一行之后中断stream读取器(读取XML并用SAXparsing它)。 读完列名后的含义 任何想法如何做到这一点? 码: XSSFSheetXMLHandler.SheetContentsHandler mySheetContentsHandler = new MySheetContentsHandler(true, xlsxHeaders); File myFile = new File(filePath); OPCPackage pkg = OPCPackage.open(myFile.getPath()); XSSFReader reader = new XSSFReader(pkg); StylesTable styles = reader.getStylesTable(); ReadOnlySharedStringsTable sharedStrings = new ReadOnlySharedStringsTable(pkg); ContentHandler handler = new XSSFSheetXMLHandler(styles, sharedStrings, mySheetContentsHandler, true); XMLReader parser = XMLReaderFactory.createXMLReader(); parser.setContentHandler(handler); parser.parse(new InputSource(reader.getSheetsData().next())); 正如你在这里看到的, XSSFSheetXMLHandler.SheetContentsHandler是一个有4个方法的接口。 但是,我怎样才能中断文件的阅读? 我试图做handler.endDocument(); 已经在接口的endRow();方法中执行了endRow(); ,它没有帮助,程序去了另一排没有任何中断。

Java Apache POI evaluateInCell不起作用

我想禁用我的Excel表中的所有公式。 我把这个代码写成只有一个单元的testing。 虽然一切都很好,我的B3细胞仍然是公式单元格。 我搜查了很多,但没有find解决办法。 什么是我的代码的问题,或者你推荐什么? public static void formulaDisabler() throws IOException, InvalidFormatException { FileInputStream file = new FileInputStream("C:\\Users\\Farid\\Desktop\\test.xlsx"); Workbook workbook = new XSSFWorkbook(file); Sheet sheet = workbook.getSheetAt(0); FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator(); CellReference cellReference = new CellReference("B3"); Row row = sheet.getRow(cellReference.getRow()); Cell cell; cell = row.getCell(cellReference.getCol()); if (cell != null) { switch (evaluator.evaluateInCell(cell).getCellType()) { case Cell.CELL_TYPE_BOOLEAN: […]

如何用相同的字节创build两个XSSFWorkbook对象

我正在尝试编写一个testing来检查我在代码中创build的Excel文件是否与资源文件(格式相同,单元格内容相同)完全相同。 一个想法是转换为字节数组,并检查字节数组是否相等。 不幸的是我有这种方法的麻烦,因为Excel格式似乎包括文件创build时间的时间戳。 例如,这个代码打印false 。 import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.ByteArrayOutputStream; import java.util.Arrays; public class Main { public static void main(String[] args) throws Exception { Workbook workbook1 = new XSSFWorkbook(); ByteArrayOutputStream baos1 = new ByteArrayOutputStream(); workbook1.write(baos1); byte[] bytes1 = baos1.toByteArray(); Thread.sleep(1000); Workbook workbook2 = new XSSFWorkbook(); ByteArrayOutputStream baos2 = new ByteArrayOutputStream(); workbook2.write(baos2); byte[] bytes2 = […]

在条件格式中使用自定义XSSF颜色?

我有一个自定义颜色的HSSF工作簿,但现在我需要使用XSSF来创buildxslx文件。 我已经改变了一切,但唯一让我难倒的是如何使用一个自定义的XSSFColor在这样的事情: XSSFPatternFormatting YesForm = YesRule.createPatternFormatting(); YesForm.setFillBackgroundColor(IndexedColors.GREEN.getIndex()); 当我有我的自定义托盘时,这工作得很好,但xssf似乎没有类似的东西或我误解了? 先谢谢你。