我正在使用Jxls API
我现在可以创建,将数据列表传递给模板,根据需要创建excel输出表
但现在我必须合并具有相同值的列单元格
这是重复细胞的每个标签
<jx:forEach items="${dummyData}" var="dummy" groupBy="col1">
<jx:forEach items="${group.items}" var="myList123">
${myList123.col1} ${myList123.col2} ${myList123.col3} ${myList123.col4} ${myList123.col5} ${myList123.col6} ${myList123.col7}
</jx:forEach>
</jx:forEach>
Run Code Online (Sandbox Code Playgroud)


我有一个大的xlsx文件,我必须实现搜索选项的大量数据我使用了Apache POI jar以及jxl jar,以便在行和列之间进行搜索.但是需要花费大量时间来遍历大数据,有些人可以帮助我,这是任何jar文件或任何其他可用于在Excel文件上更快地进行搜索的概念......
String searchValue="my_value_to_search";
for (int i = 0; i < sheet.getColumns(); i++) {
for (int j = 0; j < sheet.getRows(); j++) {
value = sheet.getCell(i, j);
valueType = value.getType();
String val=getCellType(valueType, value);
if (val != null&&val==searchValue) {
// To do manipulation.
}
}
}
Run Code Online (Sandbox Code Playgroud) package jexcel.jxl.nimit;
import java.awt.Label;
import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.CellType;
import jxl.LabelCell;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.WritableCell;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
public class ExcelJxl {
/**
* @param args
* @throws IOException
* @throws BiffException
* @throws WriteException
* @throws RowsExceededException
*/
public static void main(String[] args) throws BiffException, IOException, RowsExceededException, WriteException {
// TODO Auto-generated method stub
ExcelJxl.WriteFile("D:\nimit.xls");
}
public static void WriteFile(String path) throws BiffException, IOException, RowsExceededException, …Run Code Online (Sandbox Code Playgroud) 几年前,我遇到了使用jXLS和创建大型Excel文件的问题POI XSSF.如果我的记忆是正确的,我认为XSSF会在磁盘上创建类似1GB +临时文件的内容来创建10mb excel文件.所以我停止使用jXLS,而是用来SXSSF创建excel文件,但今天我有新的理由使用jXLS或JETT.
无论jXLS和JETT网站似乎暗示,业绩要好得多,但POI的XSSF网站仍然表示一般的XSSF要求更高的内存占用.我想知道这些更高的内存占用量是否像现在合理的10%开销,或者它仍然像几年前的10,000%开销一样.
POI 3.9修复了疯狂的坏内存问题XSSF吗?我应该不用担心使用它jXLS或JETT?还是有某些难以避免的陷阱?重用细胞样式我很小心.
这个问题已经被问过一次,但没有人给出绝对的解决方案.我试图从现有模板生成一个xls文件,但我得到一个错误,我不知道如何面对!
我的代码:String nombre ="Manuel";
try (InputStream templateFileName = ExportExcelServlet.class.getResourceAsStream("/segJBOSS/lib/xls/Tabla_Gestion.xlsx")) {
try (OutputStream destFileName = new FileOutputStream("Tabla_Gestion.xls")) {
ArrayList<String> array = new ArrayList<String>();
array.add(nombre);
Context context = new Context();
context.putVar("gestion", array);
JxlsHelper.getInstance().processTemplate(templateFileName, destFileName, context);
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
e.printStackTrace();
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
e.printStackTrace();
}
} catch (Exception e) {
// TODO: handle exception
System.out.println(e.getMessage());
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这是在WebServlet中实现的.
17:08:43,472 ERROR [org.jxls.util.TransformerFactory] (default task-3) Method createTransformer of org.jxls.transform.poi.PoiTransformer class …Run Code Online (Sandbox Code Playgroud) JXLS 2 不向后兼容版本 1。没有升级说明,虽然我可以使用版本 2,但我遇到了两个问题。
版本 1 不需要使用注释标签,但现在我无法在没有它们的情况下生成输出。
Java 代码必须指定在哪个工作表位置写入结果,在版本 1 中,输出写入在模板之上,不需要在 Excel 和 Java 代码中重复模板设置。
如果我找不到解决这两个问题的方法,我将不得不更改每个模板以使用注释。但更糟糕的是,我还必须让我的 java 代码了解模板工作表布局。我不明白为什么这是默认行为。有没有办法让版本 2 的行为更像版本 1?
我正在使用带有 apache poi 实现的 JXLS 2.3.0。
我使用以下代码来创建 excel :
try{
InputStream is = ObjectCollectionDemo.class.getResourceAsStream("/template.xls")
OutputStream os = new FileOutputStream("target/output.xls")
Context context = new Context();
context.putVar("employees", employees);
JxlsHelper.getInstance().processTemplate(is, os, context);
}
Run Code Online (Sandbox Code Playgroud)
我生成的 excel 文件如下所示:
如上图所示,第一个“名称”值仅显示部分内容。
但我想要的是:
即excel单元格中的内容可以换行,行高可以自动适应单元格内容。
我怎样才能做到这一点?提前致谢。
- - - - - - - 更新 - - - - - - - - -
解决办法是:
wrap text在模板文件中一样格式化相应的单元格我们可以发现}of${a.name}在新的一行,改成:
即make${a.name}在一行,则可以显示所有内容。
我有一个生成的Excel报告。在大多数情况下,当行数达到大约2,000时,它就可以正常工作。
今天早上,我试图生成一个包含11,000行的报告,由于它遵循相同的未更改代码,因此无法弄清为什么它会挂起-请参见下文。除了XLSTransformer可能真的很慢之外,我仍然无法弄清楚吗?
List<Map<String, Object>> maps = new ArrayList<Map<String, Object>>();
Map<String, Object> sheetData = null;
for(EntityForecastWrapper wrapper : wrappers) {
sheetName = Integer.toString(wrapper.getEntityId());
sheetNames.add(sheetName);
sheetData = new HashMap<String, Object>();
sheetData.put("wrapper", wrapper);
maps.add(sheetData);
}
Map<String, Object> beansMap = new HashMap<String, Object>();
Workbook workbook = null;
XLSTransformer transformer = new XLSTransformer();
try {
Logger.getLogger(getClass()).error("generating excel");
InputStream is = getClass().getResourceAsStream(getReportTemplate().getLabel());
workbook = transformer.transformMultipleSheetsList(is, maps, sheetNames, "map", beansMap, 0);
Logger.getLogger(getClass()).error("generated excel");
/*FileOutputStream fos = new FileOutputStream(new File(fileName));
workbook.write(fos);
fos.flush();
fos.close();*/
} catch(Exception e) {
Logger.getLogger(getClass()).error("Error …Run Code Online (Sandbox Code Playgroud) 我正在制作一个用于分析某些数据的应用程序,并且结果必须在excel文件中显示。从这个意义上讲,我开始使用Apache POI(3.11)。由于某些报告要花费大量时间和内存来进行复制,因此我进行了调查,发现jxls,经过一些测试,我认为这是解决方案。但是现在我发现了一个问题:不能同时使用两个框架。
我尝试将我的一个类从Apache POI迁移到jxls,并且出现此错误:java.lang.IllegalStateException: Cannot load XLS transformer. Please make sure a Transformer implementation is in classpath。这是我的方法的代码:
private void prepareNewReport(File excelFile) {
List perforaciones = makePerforacionReport
.makePerforacionData(escenario);
try (InputStream is = ReportePerforacionTotalDialog.class
.getResourceAsStream("PerforacionTotal_template.xls")){
try (OutputStream os = new FileOutputStream(excelFile)) {
Context context = new Context();
context.putVar("perforaciones", perforaciones);
JxlsHelper.getInstance().processTemplate(is, os, context);
LOGGER.logger.log(Level.INFO, "Archivo de perfortacion generado con éxito");
}
} catch (IOException e) {
LOGGER.logger.log(Level.SEVERE, "Problemas buscando el archivo", e);
}
Run Code Online (Sandbox Code Playgroud)
} Run Code Online (Sandbox Code Playgroud)这怎么可能?在同一个项目中,我有测试类,只有另一个软件包,并且可以正常工作。如您所见,它与jxls页面中的示例没有太大不同,并且导入是相同的。
但更糟糕的是,当我尝试清理和构建项目时,又遇到了另一个错误:
java.lang.RuntimeException: com.sun.tools.javac.code.Symbol$CompletionFailure: …Run Code Online (Sandbox Code Playgroud) 我使用JXLS来创建我的woorkbook.JXLS使用下面的POI.要创建工作簿,JXLS需要文件或输入流.
使用文件对象,我得到了我想要的woorkbook.但是,随着流我得到错误ZIP条目大小太大.
JXLS lib使用
WorkbookFactory.create()
创建工作簿的方法.所以,我尝试使用ZipStream和PushbackStream; 没有帮助.我能够从我的Junit运行相同的代码.
我看了下面的帖子. 当尝试使用Apache POI打开Excel文件时,为什么会出现异常"IOException:ZIP条目大小太大"?.
该帖子的解决方案是Maven的变化.但是,这篇文章没有提到Maven所做的改变.
你有什么建议吗?
我已经使用 jxls 1.0.5 一段时间了,最近发现需要迁移到 2.2.5,
在 jxls 1.0.5 中,我可以将一个语句嵌入另一个语句中。
<jx:forEach items="${homeDwellers}" var="homeDweller">
<jx:forEach items="${homeDweller.chores}" var="chore">
</jx:forEach>
</jx:forEach>
Run Code Online (Sandbox Code Playgroud)
在 2.2.5 中,我只输入 jx:each 的注释,这是如何完成的?
A1: jx:each(items="homeDwellers" var="homeDweller" lastCell="B3")
A2: jx:each(items="homeDweller.chores" var="chore" lastCell="B2")
Run Code Online (Sandbox Code Playgroud)
??