我正在尝试编写一个与Excel文档一起使用的程序,但HSSF格式对于我的要求来说太小了.我正在尝试迁移到XSSF,但是在尝试使用它时我一直都会遇到错误.
我设法通过将xmlbeans-2.3.0.jar和dom4j-1.6.jar添加到我的程序来解决前两个问题,但现在出现了这个错误,似乎没有通过添加Apache commons jar来解决Apache网站.
错误如下:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap
at hot.memes.ExcelCreator.main(ExcelCreator.java:66)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.ListValuedMap
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
Run Code Online (Sandbox Code Playgroud) 我有一个大的.xlsx文件(141 MB,包含293413行,每行62列)我需要在其中执行一些操作.
我在加载此文件(OutOfMemoryError)时遇到问题,因为POI在XSSF(xlsx)工作簿上占用大量内存.
这个问题类似,提出的解决方案是增加VM的分配/最大内存.
它似乎适用于那种文件大小(9MB),但对我来说,即使分配所有可用的系统内存,它也只是不起作用.(嗯,考虑到文件大于15倍,这并不奇怪)
我想知道是否有任何方法以不占用所有内存的方式加载工作簿,但是,没有基于(进入)XSSF的底层XML进行处理.(换句话说,维护清教徒POI解决方案)
如果没有强硬的话,欢迎你说("没有."),并指出了解决"XML"问题的方法.
我需要自动适应大(30k +行)xlsx文件中的所有行.
以下代码通过apache poi适用于小文件,但适用于大文件OutOfMemoryError:
Workbook workbook = WorkbookFactory.create(inputStream);
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
row.setHeight((short) -1);
}
workbook.write(outputStream);
Run Code Online (Sandbox Code Playgroud)
更新:不幸的是,增加堆大小不是一个选项 - OutOfMemoryError出现在-Xmx1024m和30k行不是一个上限.
我正在尝试升级Java应用程序以处理.xlsx,使用比现有POI库更新的POI库.我遇到类似于答案评论中提到的问题:Apache POI,同时使用XSSF和HSSF
我指的是新的ss.usermodel,但它一直告诉我它无法解析XSSF工作簿声明:
Workbook xlsImport = new XSSFWorkbook();
Run Code Online (Sandbox Code Playgroud)
我挖掘了他们的一些文档,发现XSSFWorkbook不是org.apache.poi.ss.usermodel的一部分.它是org.apache.poi.xssf.usermodel.XSSFWorkbook的一部分.但我没有poi.xssf导入.我指的是错的吗?我正在使用POI 3.7感谢您提供的任何帮助.
我需要使用Apache POI在excel文件中创建一个下拉列表.我能够做到这一点但是我无法将下拉列表中的第一项作为默认项目.
public class sd {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
DataValidation dataValidation = null;
DataValidationConstraint constraint = null;
DataValidationHelper validationHelper = null;
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet1=(XSSFSheet) wb.createSheet("sheet1");
validationHelper=new XSSFDataValidationHelper(sheet1);
CellRangeAddressList addressList = new CellRangeAddressList(0,5,0,0);
constraint =validationHelper.createExplicitListConstraint(new String[]{"SELECT","10", "20", "30"});
dataValidation = validationHelper.createValidation(constraint, addressList);
dataValidation.setSuppressDropDownArrow(true);
sheet1.addValidationData(dataValidation);
FileOutputStream fileOut = new FileOutputStream("c:\\temp\\vineet.xlsx");
wb.write(fileOut);
fileOut.close();
}
}
Run Code Online (Sandbox Code Playgroud) 我刚才有一个关于如何使用Apache的XSSF格式读取xlsx文件的快速问题.
现在我的代码看起来像这样:
InputStream fs = new FileInputStream(filename); // (1)
XSSFWorkbook wb = new XSSFWorkbook(fs); // (2)
XSSFSheet sheet = wb.getSheetAt(0); // (3)
Run Code Online (Sandbox Code Playgroud)
......导入了所有相关的东西.我的问题是,当我点击运行时,它会陷入第(2)行,几乎是无限循环.filename只是一个字符串.
如果有人能给我一些关于如何解决这个问题的示例代码,我将非常感激.我现在想要的只是从xlsx文件中读取单个单元格; 我使用HSSF用于xls文件并且没有问题.
谢谢你的帮助,安德鲁
我收到此错误:
org.apache.poi.poifs.filesystem.OfficeXmlFileException:提供的数据似乎在Office 2007+ XML中.您正在调用处理OLE2 Office文档的POI部分.您需要调用POI的不同部分来处理此数据(例如,XSSF而不是HSSF)
我读了扔谷歌,我发现我需要使用XSSF而不是HSSF,因为我的Excel文件是xlsx,但正如你在我的maven中看到的,我已经在使用xlsx了.我哪里出错了?
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.13-beta1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
产生异常的代码是:
POIFSFileSystem fs;
fs = new POIFSFileSystem(new FileInputStream(getFilePath()));
Run Code Online (Sandbox Code Playgroud)
public void getBColum() {
try {
OPCPackage fs;
fs = new OPCPackage.open(new File(getFilePath()));
XSSFWorkbook wb = new XSSFWorkbook(fs);
XSSFSheet sheet = wb.getSheet("Master column name - Used Car");
XSSFRow row;
CellReference cr = new CellReference("A1");
row = sheet.getRow(cr.getCol());
System.out.println(row.getCell(3));
} catch (FileNotFoundException e) {
if (logger.isDebugEnabled()) {
logger.debug("How can this error be possible? we should have already thrown an exception in …Run Code Online (Sandbox Code Playgroud) xlsx使用Apache POI API 读取文件时如何获取最后一列的索引?
有一种getLastRowNum方法,但我找不到任何与列数相关的内容......
编辑:我正在处理XLSX文件
我正在尝试使用一些验证生成一个excel文件,我已经阅读了poi dev指南来实现它.在实现过程中,我得到了一个异常(String literals in formulas can't be bigger than 255 characters ASCII).POI将所有下拉选项连接成'0'消除字符串并检查其长度并给我异常.:(
我正在使用最新版本的POI 3.8 beta 5.
我的代码是:
try {
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
HSSFRow row = sheet.createRow((short) 0);
//CellRangeAddressList from org.apache.poi.ss.util package
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(getCountries());
DataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint);
dataValidation.setSuppressDropDownArrow(false);
sheet.addValidationData(dataValidation);
FileOutputStream fileOut = new FileOutputStream("c:\\test.xls");
wb.write(fileOut);
fileOut.close();
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
之后我尝试使用此代码使用XSSFWorkBook:
XSSFWorkbook wb = …Run Code Online (Sandbox Code Playgroud) HSSFWorkbook vs XSSFWorkbook以及XSSFWorkbook和SXSSFWorkbook的优缺点?