有没有办法在Apache POI中确定MS Office Excel文件类型?我需要知道Excel文件的格式是什么:在Excel '97(-2007)(.xls)或Excel 2007 OOXML(.xlsx)中.
我想我可以这样做:
int type = PoiTypeHelper.getType(file);
switch (type) {
case PoiType.EXCEL_1997_2007:
...
break;
case PoiType.EXCEL_2007:
...
break;
default:
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
基本问题:如何加载Excel模板以与POI一起使用,然后将其保存到XLS文件中?
编辑:
答案是:
FileInputStream inputStream = new FileInputStream(new File(templateFile));
Workbook workbook = new HSSFWorkbook(inputStream);
Run Code Online (Sandbox Code Playgroud)
(只需将模板作为工作簿加载,然后将工作簿作为XLS文件写入其他位置.)
我在excel中创建日历.第1列是2010年1月1日(dd.MM.yyyy),第2列是02.01.2010,依此类推.
这是我的代码:
int day_cell = 0;
for(int i = 0; i < days.size(); i++)
{
Date day = days.get(i);
HSSFCell cell = row.createCell(day_cell++);
cell.setCellValue(day.toString());
}
Run Code Online (Sandbox Code Playgroud)
当我到达第256列POI时抛出此异常:
java.lang.IllegalArgumentException: Invalid column index (256). Allowable column range for BIFF8 is (0..255) or ('A'..'IV')
at org.apache.poi.hssf.usermodel.HSSFCell.checkBounds(HSSFCell.java:926)
at org.apache.poi.hssf.usermodel.HSSFCell.<init>(HSSFCell.java:162)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:141)
at org.apache.poi.hssf.usermodel.HSSFRow.createCell(HSSFRow.java:119)
Run Code Online (Sandbox Code Playgroud)
我发现这个错误报告表明它已在3.6版本中得到修复.我们使用3.5但是改为3.6似乎没有任何好处.有人有任何提示吗?
https://issues.apache.org/bugzilla/show_bug.cgi?id=46806
编辑:似乎错误问题是关于公式..
我在J2EE Web应用程序中使用POI来生成工作簿.但是,我发现POI大约需要3分钟来创建一个25K行的工作簿(每行大约15列).这是POI性能问题,还是花费大量时间是合理的?是否有其他API可以提高性能?
我在我的Web服务器上构建了一个非常大的POI工作簿.将整个工作簿保存在内存中,不会扩展多个并发请求.有没有办法可以逐步将工作簿写入servlet输出流.这应该减少响应时间,并使进程内存有效.
我有Excel单元格地址,如A1,A2.那么,如何使用poi3.6以编程方式访问此单元格
另一种方式是
row=mySheet.getRow();
cell=row.getCell();
Run Code Online (Sandbox Code Playgroud)
但我有A1格式的地址...所以,我如何以编程方式访问这些单元格
我想使用Apache POI在Scala应用程序中读取/创建Excel文件.当然,我可以直接使用POI库,毕竟它是Java,但我想让Scala感觉到.那么是否有一个Scala包装器带来了Scala的感觉(使用隐式转换),即某种"Scala-POI-DSL"免费提供?
尝试.xlsx使用Apache POI 编写文件时,我收到以下异常:org.apache.xmlbeans.impl.values.XmlValueDisconnectedException
看来问题是第二次使用write()方法.使用HSSFWorkbook时,不会出现此问题.
这是代码:
public class SomeClass{
XSSFWorkbook workbook;
public SomeClass() throws IOException{
File excelFile = new File("workbook.xlsx");
InputStream inp = new FileInputStream(excelFile);
workbook = new XSSFWorkbook(inp);
inp.close();
}
void method(int i) throws InvalidFormatException, IOException {
XSSFSheet sheet = workbook.getSheetAt(0);
XSSFRow row = sheet.getRow(i);
if (row == null) {
row = sheet.createRow(i);
}
XSSFCell cell = row.getCell(i);
if (cell == null)
cell = row.createCell(i);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("a test");
// Write the output to a file
FileOutputStream fileOut …Run Code Online (Sandbox Code Playgroud) 我正在使用Android studio 1.5.1
我想在我的android项目中包含org.apache.poi-ooxml库.要包含该库,我需要包含一些其他库依赖项,其中包括stax-api库.
stax api的问题在于它拥有javax中的所有包.*这是一个"核心库".Java jdk包含了所有这些库,所以如果我在Java SE中使用它,我就不需要那个stax-api库.另一方面,Android有一个"部分"stax-api库.对于android我只需要javax.xml.stream.*包.这意味着我需要提取stax-api,删除除javax.xml.stram包之外的所有内容,然后重新打包它.
所以我想在Android中使用这个修改过的库是安全的.但是,它有javax.*包,根据Android studio是一个核心库,所以Android Studio(或Android Studio中的任何组件)给我一个警告:
处理"javax/xml/stream/EventFilter.class"时遇到问题:
在不构建核心库时,不明智或错误地使用核心类(java.*或javax.*).
这通常是由于在使用IDE(例如Eclipse)时无意中在应用程序的项目中包含了核心库文件.如果你确定你不是故意定义一个核心类,那么这就是最可能的解释.
但是,您实际上可能正在尝试在核心命名空间中定义一个类,例如,您可能已从非Android虚拟机项目中获取该类.这肯定是行不通的.它至少会危害您的应用与该平台的未来版本的兼容性.它的合法性通常也是有问题的.
如果您真的打算构建一个核心库 - 它只适合作为创建完整虚拟机分发的一部分,而不是编译应用程序 - 那么使用"--core-library"选项来抑制此错误消息.
如果你继续使用"--core-library"但实际上正在构建一个应用程序,那么预先警告你的应用程序仍然无法构建或运行,在某些时候.请为愤怒的客户做好准备,例如,一旦升级操作系统,您的应用程序就会停止运行.你应该为这个问题负责.
如果您合法地使用恰好位于核心软件包中的某些代码,那么最简单的安全替代方法是重新打包该代码.也就是说,将有问题的类移动到您自己的包命名空间中.这意味着它们永远不会与核心系统类冲突.JarJar是一个可以帮助您完成这项工作的工具.如果你发现你不能做到这一点,那就表明你所走的道路最终会导致痛苦,痛苦,悲伤和悲伤.
所以,我想使用这个--core-library选项.但是在哪里设置呢?
我已经看过Android Studio忽略--core-library标志,这对我没有帮助.我认为这些答案已经过时,这就是为什么我要问一个新问题.
我做了什么尝试:
的build.gradle:
dexOptions {
coreLibrary true;
}
Run Code Online (Sandbox Code Playgroud)的build.gradle:
dexOptions {
preDexLibraries = false
}
project.tasks.withType(com.android.build.gradle.tasks.Dex) {
additionalParameters=['--core-library']
}
Run Code Online (Sandbox Code Playgroud)文件 - >其他设置 - >默认设置 - >编译器 - > Android编译器并检查'添加 - 核心库标志'
这些都没有奏效.有没有办法设置该选项?
编辑:为什么我需要STAX:
我正在做一些与Workbook,Sheet,Columns,Cells for .xlsx文件的东西.当我只包括poi-ooxml-3.14-beta1-20151223.jar 我在构建时间中得到一个错误说class file for org.apache.poi.ss.usermodel.Workbook not found.
在运行时包含poi-3.14-beta1-20151223.jar后,我得到了Could not find method org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook.isSetBookViews, referenced from …
我有一个包含阿拉伯字符的xml文件.当我尝试解析文件时,会出现Exception,MalformedByteSequenceException:2字节UTF-8序列的无效字节2.我使用POI DOM来解析文档.
日志是,
2012-03-19 11:30:00,433 [ERROR] (com.infomindz.remitglobe.bll.remittance.BlackListBean) - Error
com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte UTF-8 sequence.
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipChar(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at com.infomindz.remitglobe.bll.remittance.BlackListBean.updateGeneralBlackListDetail(Unknown Source)
at com.infomindz.remitglobe.bll.remittance.schedulers.BlackListUpdateScheduler.executeInternal(Unknown Source)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:86)
at org.quartz.core.JobRunShell.run(JobRunShell.java:216)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
Run Code Online (Sandbox Code Playgroud)
例外情况只出现在Windows机器上,而不是出现在Linux机器上.如何解决这个问题.任何建议都应该引人注意.