标签: apache-poi

使用Apache POI确定MS Excel文件类型

有没有办法在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)

谢谢.

java excel apache-poi

20
推荐指数
2
解决办法
2万
查看次数

将Excel模板与Apache POI一起使用

基本问题:如何加载Excel模板以与POI一起使用,然后将其保存到XLS文件中?

编辑:

答案是:

FileInputStream inputStream = new FileInputStream(new File(templateFile));
Workbook workbook = new HSSFWorkbook(inputStream);
Run Code Online (Sandbox Code Playgroud)

(只需将模板作为工作簿加载,然后将工作簿作为XLS文件写入其他位置.)

java excel apache-poi

19
推荐指数
3
解决办法
6万
查看次数

如何使用Apache POI 3.6在Excel工作表中获得超过255列

我在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

编辑:似乎错误问题是关于公式..

java excel apache-poi

19
推荐指数
3
解决办法
3万
查看次数

POI表现

我在J2EE Web应用程序中使用POI来生成工作簿.但是,我发现POI大约需要3分钟来创建一个25K行的工作簿(每行大约15列).这是POI性能问题,还是花费大量时间是合理的?是否有其他API可以提高性能?

java excel apache-poi

19
推荐指数
2
解决办法
2万
查看次数

将POI工作簿流式传输到servlet输出流

我在我的Web服务器上构建了一个非常大的POI工作簿.将整个工作簿保存在内存中,不会扩展多个并发请求.有没有办法可以逐步将工作簿写入servlet输出流.这应该减少响应时间,并使进程内存有效.

java servlets apache-poi

19
推荐指数
3
解决办法
2万
查看次数

如何使用apache poi 3.6获取A1(单元格地址)的Cell值

我有Excel单元格地址,如A1,A2.那么,如何使用poi3.6以编程方式访问此单元格

另一种方式是

 row=mySheet.getRow();
 cell=row.getCell();
Run Code Online (Sandbox Code Playgroud)

但我有A1格式的地址...所以,我如何以编程方式访问这些单元格

apache-poi

19
推荐指数
2
解决办法
2万
查看次数

是否有针对Apache POI的Scala包装器?

我想使用Apache POI在Scala应用程序中读取/创建Excel文件.当然,我可以直接使用POI库,毕竟它是Java,但我想让Scala感觉到.那么是否有一个Scala包装器带来了Scala的感觉(使用隐式转换),即某种"Scala-POI-DSL"免费提供?

excel scala apache-poi

19
推荐指数
3
解决办法
9193
查看次数

使用apache poi 3.7多次写入xlsx文档时出现异常

尝试.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)

java excel apache-poi

19
推荐指数
2
解决办法
3万
查看次数

在android中集成org.apache.poi和javax.xml.stream.*包(stax-api) - 如何在Android Studio中设置--core-library参数?

我正在使用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标志,这对我没有帮助.我认为这些答案已经过时,这就是为什么我要问一个新问题.

我做了什么尝试:

  1. 的build.gradle:

    dexOptions {
      coreLibrary true;
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 的build.gradle:

    dexOptions {
      preDexLibraries = false
    }
    
    project.tasks.withType(com.android.build.gradle.tasks.Dex) {
      additionalParameters=['--core-library']
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 文件 - >其他设置 - >默认设置 - >编译器 - > 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 …

java android stax apache-poi android-studio

19
推荐指数
1
解决办法
3461
查看次数

MalformedByteSequenceException:2字节UTF-8序列的无效字节2

我有一个包含阿拉伯字符的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机器上.如何解决这个问题.任何建议都应该引人注意.

java xml apache-poi

18
推荐指数
2
解决办法
7万
查看次数

标签 统计

apache-poi ×10

java ×8

excel ×6

android ×1

android-studio ×1

scala ×1

servlets ×1

stax ×1

xml ×1