- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们使用 displaytag 以 xls 格式导出文件,但我希望以 xlsx 格式导出文件。有什么方法可以将Excel文件转换为新格式吗?
我将显示标记中的扩展名从 xls 更改为 xlsx
<display:setProperty name="export.excel" value="true"/>
<display:setProperty name="export.excel.filename" value="assignedUserGroup.xlsx" />
但当我在 Office 2007 或 2010 中打开它时,它给我“文件扩展名无效”
。
最佳答案
这是一个非常有用的问题。
第 1 步:制作包com.displaytag.export.views
第2步:在上面的包中创建一个类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 步:在资源文件夹中创建一个文件 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-export-poi-1.2.jar
displaytag-portlet-1.2.jar
commons-lang-2.3 or above
commons-beanutils-1.7.0 or above
commons-collections-3.1 or above
commons-logging-1.1.jar
itext-1.3 or above
slf4j-api-1.4.2 or above
slf4j-log4j12-1.4.2 or above
poi-3.2-FINAL.jar
poi-3.9.jar
poi-ooxml-3.9.jar
poi-ooxml-schemas-3.9.jar
stax-api-1.0.1.jar
xmlbeans-2.6.0.jar
commons-codec-1.5.jar
dom4j-1.6.1.jar
log4j-1.2.15.jar
注意:如果我忘记了任何依赖项 jar,请使用 maven 检查它。
第 8 步: 运行项目并享受 :) 如果有任何错误,请告诉我。另外,如果您在 displaytag
中使用任何装饰器,那么您必须为其编写代码。
谢谢
创建资源文件夹如果您使用的是 eclipse,请右键单击 java 资源,如下所示
命名为 res 并在其中创建一个属性文件
使用 netBeans IDE 7.4
关于java - 如何在displaytag中导出带有xlsx扩展名的excel文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23486786/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!