如何在displaytag中导出带有xlsx扩展名的excel文件

我们用displaytag来导出xls格式的文件,但是我想用xlsx格式。 有没有办法将Excel文件转换为新格式?

我将显示标签的扩展名从xls更改为xlsx

<display:setProperty name="export.excel" value="true"/> <display:setProperty name="export.excel.filename" value="assignedUserGroup.xlsx" /> 

但是当我在办公室2007或2010年打开它时,它给了我"File extension is not valid"

这是非常有用的问题。

第1步:制作一个包com.displaytag.export.views

第2步:在上面的包中创build一个类myExcel2007ExportView.java

步骤3:在该文件中复制并粘贴以下代码

 package com.displaytag.export.views; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; import javax.servlet.jsp.JspException; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; import org.displaytag.export.BinaryExportView; import org.displaytag.model.Column; import org.displaytag.model.ColumnIterator; import org.displaytag.model.HeaderCell; import org.displaytag.model.RowIterator; import org.displaytag.model.TableModel; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import com.lowagie.text.BadElementException; public class myExcel2007ExportView implements BinaryExportView{ //private static Log log = LogFactory.getLog(myExcel2007ExportView.class); private TableModel model; private boolean exportFull; private boolean header; private boolean decorated; private XSSFWorkbook workbook; private XSSFSheet sheet; private int rowCount=0; private CellStyle normalstyle=null; private CellStyle headerstyle=null; private CellStyle captionstyle=null; private XSSFFont defaultFont; private XSSFFont headerFont; private XSSFFont captionFont; public String getMimeType() { return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; } public void setParameters(TableModel tableModel, boolean exportFullList, boolean includeHeader, boolean decorateValues) { this.model = tableModel; this.exportFull = true; this.header = includeHeader; this.decorated = decorateValues; } public boolean outputPage() { return false; } protected void initTable() throws BadElementException { //Blank workbook workbook = new XSSFWorkbook(); //Create a blank sheet sheet = workbook.createSheet("Server Management System"); defaultFont= workbook.createFont(); defaultFont.setFontHeightInPoints((short)10); defaultFont.setFontName("Arial"); defaultFont.setColor(IndexedColors.BLACK.getIndex()); defaultFont.setBold(false); defaultFont.setItalic(false); headerFont= workbook.createFont(); headerFont.setFontHeightInPoints((short)10); headerFont.setFontName("Arial"); headerFont.setColor(IndexedColors.WHITE.getIndex()); headerFont.setBold(true); headerFont.setItalic(false); captionFont= workbook.createFont(); captionFont.setFontHeightInPoints((short)15); captionFont.setFontName("Arial"); captionFont.setColor(IndexedColors.BLACK.getIndex()); captionFont.setBold(true); captionFont.setItalic(false); normalstyle= workbook.createCellStyle(); normalstyle.setFillBackgroundColor(IndexedColors.WHITE.getIndex()); normalstyle.setFillPattern(CellStyle.BIG_SPOTS); normalstyle.setAlignment(CellStyle.ALIGN_CENTER); normalstyle.setFont(defaultFont); headerstyle= workbook.createCellStyle(); headerstyle.setFillBackgroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerstyle.setFillPattern(CellStyle.BIG_SPOTS); headerstyle.setAlignment(CellStyle.ALIGN_CENTER); headerstyle.setFont(headerFont); captionstyle= workbook.createCellStyle(); captionstyle.setFillBackgroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); captionstyle.setFillPattern(CellStyle.BIG_SPOTS); captionstyle.setAlignment(CellStyle.ALIGN_CENTER); captionstyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER); captionstyle.setFont(captionFont); } protected void generateXLSXTable() throws JspException, BadElementException { //adding caption if(this.model.getCaption()!=null && this.model.getCaption()!="") { Row blankrow = sheet.createRow(rowCount++); Row row = sheet.createRow(rowCount++); row.setHeight((short)5000); int columnCount=0; Cell captionCell = row.createCell(columnCount++); captionCell.setCellValue(this.model.getCaption()); captionCell.setCellStyle(captionstyle); sheet.addMergedRegion(new CellRangeAddress( rowCount-1, //first row (0-based) rowCount-1, //last row (0-based) columnCount-1, //first column (0-based) columnCount+5 //last column (0-based) )); Row blankrow2 = sheet.createRow(rowCount++); } if (this.header) { generateHeaders(); } generateRows(); //adding footer if(this.model.getFooter()!=null && this.model.getFooter()!="") { Row blankrow = sheet.createRow(rowCount++); Row blankrow2 = sheet.createRow(rowCount++); Row row = sheet.createRow(rowCount++); row.setHeight((short)1000); int columnCount=0; Cell captionCell = row.createCell(columnCount++); captionCell.setCellValue(this.model.getFooter()); captionCell.setCellStyle(captionstyle); sheet.addMergedRegion(new CellRangeAddress( rowCount-1, //first row (0-based) rowCount-1, //last row (0-based) columnCount-1, //first column (0-based) columnCount+5 //last column (0-based) )); } } protected void generateHeaders() throws BadElementException { Iterator<HeaderCell> iterator = this.model.getHeaderCellList().iterator(); Row row = sheet.createRow(rowCount++); int columnCount=0; while (iterator.hasNext()) { sheet.autoSizeColumn(columnCount); HeaderCell headerCell = iterator.next(); String columnHeader = headerCell.getTitle(); if (columnHeader == null) { columnHeader = StringUtils.capitalize(headerCell.getBeanPropertyName()); } Cell hdrCell = row.createCell(columnCount++); hdrCell.setCellValue(columnHeader); hdrCell.setCellStyle(headerstyle); } } protected void generateRows() throws JspException, BadElementException { // get the correct iterator (full or partial list according to the exportFull field) RowIterator rowIterator = this.model.getRowIterator(this.exportFull); // iterator on rows while (rowIterator.hasNext()) { Row newrow = sheet.createRow(rowCount++); org.displaytag.model.Row row = rowIterator.next(); // iterator on columns ColumnIterator columnIterator = row.getColumnIterator(this.model.getHeaderCellList()); int columnCount=0; while (columnIterator.hasNext()) { Column column = columnIterator.nextColumn(); // Get the value to be displayed for the column Object value = column.getValue(this.decorated); Cell Cell = newrow.createCell(columnCount++); Cell.setCellValue(ObjectUtils.toString(value)); } } } @Override public void doExport(OutputStream out) throws IOException, JspException { try { // Initialize the table with the appropriate number of columns initTable(); generateXLSXTable(); } catch (BadElementException e) { // TODO Auto-generated catch block e.printStackTrace(); } workbook.write(out); out.close(); } } 

注意:您可以根据需要修改此课程。

第4步:在资源文件夹中创build一个文件displaytag.properties

第5步:复制并粘贴以下代码

 export.amount=list sort.amount=list export.decorated=true export.types=csv excel xml pdf rtf [mymedia] export.[mymedia]=true export.[mymedia].class=com.displaytag.export.views.myExcel2007ExportView export.excel=true export.csv=true export.xml=true export.pdf=true export.pdf.include_header=true export.excel.include_header=true export.rtf=true export.rtf.label=<span class="export rtf">RTF </span> export.rtf.include_header=true export.rtf.filename= export.[mymedia].label=<span class="export excel">Excel 2007 </span> export.[mymedia].include_header=true export.[mymedia].filename= 

注意:确保你不改变属性的顺序

第6步:jsp文件中

  <display:table id="l" name="yourList" pagesize="10" requestURI="/yourAction.action" style="width:100%" export="true"> <display:setProperty name="export.csv.filename" value="YourReport.csv" /> <display:setProperty name="export.excel.filename" value="YourReport.xls" /> <display:setProperty name="export.xml.filename" value="YourReport.xml" /> <display:setProperty name="export.rtf.filename" value="YourReport.rtf" /> <display:setProperty name="export.pdf.filename" value="YourReport.pdf" /> <display:setProperty name="export.[mymedia].filename" value="YourReport.xlsx" /> <display:caption media="csv xml excel pdf rtf [mymedia]"> yourcaption</display:caption> <display:column property="id" titleKey="selectlogdetails.logid" sortable="false" /> //other columns <display:footer media="csv xml excel pdf rtf [mymedia]"> yourfooter </display:footer> </display:table> 

注意:不要忘了在标题,页脚中添加[mymedia],也不要忘了设置文件名如下。

  <display:setProperty name="export.[mymedia].filename" value="YourReport.xlsx" /> 

第7步:将以下jar文件复制并粘贴到WEB-INF/lib文件夹中

displaytag-1.2.jar

displaytag出口-POI-1.2.jar

displaytag,portlet的1.2.jar

commons-lang-2.3或以上

commons-beanutils-1.7.0或以上

commons-collections-3.1以上

共享logging-1.1.jar

itext-1.3或以上

slf4j-api-1.4.2或以上

slf4j-log4j12-1.4.2或以上

POI-3.2-FINAL.jar

POI-3.9.jar

POI-OOXML-3.9.jar

POI-OOXML-模式-3.9.jar

STAX的API-1.0.1.jar

XMLBeans的-2.6.0.jar

公地编解码器1.5.jar

dom4j的-1.6.1.jar

log4j的-1.2.15.jar

注意:如果我忘记了任何依赖关系jar,请使用maven进行检查。

第8步:运行项目,并享受:)也让我知道是否有任何错误。 另外,如果您在displaytag中使用任何装饰器,则必须为其编写代码。

谢谢

制作资源文件夹如果您使用的是Eclipse,请右键单击Java资源,如下所示

资源文件夹

给名称res,并在其中创build一个属性文件

蚀

使用netBeans IDE 7.4

NetBeans的