怎么让table exportexport支持中文导出

1922人阅读
今天就介绍下之前在任务中遇到的Excel导出的问题,刚做的时候查了很多资料,发现都不太全,今天就介绍下前台和后台。
优点:在windows和linux环境下都可执行,但是需要拼接。
table2Excel.js
var tableId;
var excelT
function exportExcel(tableId,excelTitle,datesource){
this.tableId=tableId;
this.excelTitle=excelT
var xls = new ActiveXObject ( &Excel.Application& );
catch(e) {
alert( &要打印该表,您必须安装Excel电子表格软件,同时浏览器须使用“ActiveX 控件”,您的浏览器须允许执行控件。 &);
return &&;
xls.visible = // 设置excel为可见
var xlBook = xls.Workbooks.A
var xlsheet = xlBook.Worksheets(1);
//--合并--
var oTable=document.all[this.tableId];
xlsheet.Rows(1).Font.Name=&黑体&;
//--设置显示字符而不是数字--
xlsheet.Columns(2).NumberFormatLocal=&@&;
xlsheet.Columns(3).NumberFormatLocal=&@&;
xlsheet.Columns(4).NumberFormatLocal=&@&;
xlsheet.Columns(5).NumberFormatLocal=&@&;
xlsheet.Columns(6).NumberFormatLocal=&@&;
xlsheet.Columns(7).NumberFormatLocal=&@&;
xlsheet.Columns(8).NumberFormatLocal=&@&;
xlsheet.Columns(9).NumberFormatLocal=&@&;
xlsheet.Columns(10).NumberFormatLocal=&@&;
// 设置单元格内容自动换行 range.WrapText =
// 设置单元格内容水平对齐方式
range.HorizontalAlignment =Excel.XlHAlign.xlHAlignC//设置单元格内容竖直堆砌方式
range.VerticalAlignment=Excel.XlVAlign.xlVAlignC
range.WrapText = xlsheet.Rows(3).WrapText=
//自动换行
// 设置标题栏
xlsheet.Cells(1,1).Value=&&;
xlsheet.Cells(1,2).Value=&xx&;//标题栏题目
xlsheet.Cells(1,3).Value=&xx&;
xlsheet.Cells(1,4).Value=&xx&;
xlsheet.Cells(1,5).Value=&xx&;
xlsheet.Cells(1,6).Value=&xx&;
xlsheet.Cells(1,7).Value=&xx&;
xlsheet.Cells(1,8).Value=&xx&;
xlsheet.Cells(1,9).Value=&xx&;
xlsheet.Cells(1,10).Value=&xx&;
xlsheet.Cells(1,11).Value=&xx&;
xlsheet.Cells(1,12).Value=&xx&;
xlsheet.Cells(1,13).Value=&xx&;
date = eval(datesource);
for(var da=0; da&date. da++)
xlsheet.Cells(da+2,1).Value=date[da].ID;
xlsheet.Cells(da+2,2).Value=date[da].COLLA_CODE;
xlsheet.Cells(da+2,3).Value=date[da].OCOLLA_ID;
xlsheet.Cells(da+2,4).Value=date[da].WARRANT_ID;
xlsheet.Cells(da+2,5).Value=date[da].IOU_ID;
xlsheet.Cells(da+2,6).Value=date[da].LOAN_PER;
xlsheet.Cells(da+2,7).Value=date[da].COL_TYPE;
xlsheet.Cells(da+2,8).Value=date[da].EST_TIME;
xlsheet.Cells(da+2,9).Value=date[da].ACCORG_ID;
xlsheet.Cells(da+2,10).Value=date[da].STOORG_ID;
xlsheet.Cells(da+2,11).Value=date[da].CURRENCY;
xlsheet.Cells(da+2,12).Value=date[da].LOAN_AMT;
xlsheet.Cells(da+2,13).Value=date[da].STATUS;
xlsheet.Columns.AutoF
xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(rowNum+1,cellNum)).HorizontalAlignment =-4108;// 居中
xlsheet.Range( xlsheet.Cells(1,1),xlsheet.Cells(1,7)).VerticalAlignment =-4108;
xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,cellNum)).Font.Size=10;
xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,cellNum)).Borders(3).Weight = 2; // 设置左边距
xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,cellNum)).Borders(4).Weight = 2;// 设置右边距
xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,cellNum)).Borders(1).Weight = 2;// 设置顶边距
xlsheet.Range( xlsheet.Cells(2,1),xlsheet.Cells(rowNum+1,cellNum)).Borders(2).Weight = 2;// 设置底边距
xls.UserControl = // 很重要,不能省略,不然会出问题 意思是excel交由用户控制
其中要导出数据的话,直接调用exportExcel(tableId,excelTitle,msg);方法。tableId指的是table的代号(可有可无),excelTitle指的的表格的标题,msg指的是数据,可以用ajax后台传输,另外要注意的是运行成功后,要安装Excel ,不要用wps,之前试过,wps不支持。
优点:可以弹出框体,让你自己选择路径和格式
缺点:部分弹出框体的方法在linux中不支持,所以只能在window的环境下运行。
PrintService.java
package com.rfid.service.
* 导出excel类
import java.io.F
import java.io.FileOutputS
import java.io.IOE
import java.lang.reflect.F
import java.lang.reflect.InvocationTargetE
import java.lang.reflect.M
import java.text.SimpleDateF
import java.util.D
import java.util.I
import java.util.L
import java.util.StringT
import java.util.regex.M
import java.util.regex.P
import javax.swing.JFileC
import javax.swing.JOptionP
import javax.swing.JTextF
import javax.swing.filechooser.FileF
import org.apache.poi2.hssf.usermodel.HSSFC
import org.apache.poi2.hssf.usermodel.HSSFClientA
import org.apache.poi2.hssf.usermodel.HSSFF
import org.apache.poi2.hssf.usermodel.HSSFRichTextS
import org.apache.poi2.hssf.usermodel.HSSFR
import org.apache.poi2.hssf.usermodel.HSSFS
import org.apache.poi2.hssf.usermodel.HSSFW
import org.apache.poi2.hssf.util.HSSFC
import org.slf4j.L
import org.slf4j.LoggerF
import org.
import com.rfid.entity.print.P_;
@Component
public class PrintService {
Logger log = LoggerFactory.getLogger(PrintService.class);
public void resultSetToExcel(String[] headers, List list,
String sheetName) throws Exception {
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
workbook.setSheetName(0, sheetName, HSSFWorkbook.ENCODING_UTF_16);
HSSFRow row = sheet.createRow((short) 0);
String adr = selectSavePath();
// 产生表格标题行
row = sheet.createRow(0);
for (short i = 0; i & headers. i++) {
cell = row.createCell(i);
HSSFRichTextString text = new HSSFRichTextString(headers[i]);
cell.setCellValue(text);
// 遍历集合数据,产生数据行
Iterator&P_& it = list.iterator();
int index = 0;
while (it.hasNext()) {
row = sheet.createRow(index);
P_ t = (P_) it.next();
// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
Field[] fields = t.getClass().getDeclaredFields();
for (short i = 0; i & headers. i++) {
cell = row.createCell(i);
Field field = fields[i];
String fieldName = field.getName();
String getMethodName = &get&
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
Class tCls = t.getClass();
Method getMethod = tCls.getMethod(getMethodName,
new Class[] {});
Object value = getMethod.invoke(t, new Object[] {});
// 判断值的类型后进行强制类型转换
String textValue =
// 其它数据类型都当作字符串简单处理
textValue = value.toString();
// 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成
if (textValue != null) {
Pattern p = pile(&^//d+(//.//d+)?$&);
Matcher matcher = p.matcher(textValue);
if (matcher.matches()) {
// 是数字当作double处理
cell.setCellValue(Double.parseDouble(textValue));
HSSFRichTextString richString = new HSSFRichTextString(
textValue);
HSSFFont font3 = workbook.createFont();
font3.setColor(HSSFColor.BLUE.index);
richString.applyFont(font3);
cell.setCellValue(richString);
} catch (SecurityException e) {
(&excel export error:&+e.getMessage());
} catch (NoSuchMethodException e) {
(&excel export error:&+e.getMessage());
} catch (IllegalArgumentException e) {
(&excel export error:&+e.getMessage());
} catch (IllegalAccessException e) {
(&excel export error:&+e.getMessage());
} catch (InvocationTargetException e) {
(&excel export error:&+e.getMessage());
} finally {
// 清理资源
//String adr = &d:\\&+xlsName+&.xls&;
FileOutputStream fOut = new FileOutputStream(adr);
workbook.write(fOut);
fOut.flush();
fOut.close();
//path = D:\\Backup\\我的文档\\_110848.xls
String fileName = adr.replace('\\', '/');
StringTokenizer st = new StringTokenizer(fileName, &/&);
while (st.hasMoreTokens())
String sub = st.nextToken();
if ((sub.indexOf(' ') != -1) || (sub.indexOf('&') != -1) || (sub.indexOf('(') != -1) || (sub.indexOf(')') != -1) || (sub.indexOf('[') != -1) || (sub.indexOf(']') != -1) || (sub.indexOf('{') != -1) || (sub.indexOf('}') != -1) || (sub.indexOf('^') != -1) || (sub.indexOf('=') != -1) || (sub.indexOf(';') != -1) || (sub.indexOf('!') != -1) || (sub.indexOf('\'') != -1) || (sub.indexOf('+') != -1) || (sub.indexOf(',') != -1) || (sub.indexOf('`') != -1) || (sub.indexOf('~') != -1))
//过滤掉特殊字符
fileName = fileName.replaceFirst(sub, &\&& + sub + &\&&);
// fileName = D:/Backup/我的文档/_110848.xls
Runtime.getRuntime().exec(&cmd /E:ON /c start & + fileName);
JOptionPane.showMessageDialog(null, &导出数据成功!&);
//获得框图
public String selectSavePath(){
SimpleDateFormat dateformat = new SimpleDateFormat(&yyyy-MM-dd_HHmmss&);
String name = dateformat.format(new Date());
name = name + &.xls&;
//构造文件保存对话框
JFileChooser chooser = new JFileChooser();
chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
chooser.setDialogType(JFileChooser.SAVE_DIALOG);
chooser.setMultiSelectionEnabled(false);
chooser.setAcceptAllFileFilterUsed(false);
chooser.setDialogTitle(&保存单位数据文件&);
//取得文件名输入框设置指定格式
JTextField fileNameField = getTextField(chooser);
fileNameField.setText(name);
//替代方法
chooser.setSelectedFile(new File(name)); // 生成默认
//添加文件过滤器
chooser.addChoosableFileFilter(new FileFilter(){
public boolean accept(File f) {
public String getDescription() {
return &所有文件(*.*)&;
chooser.addChoosableFileFilter(new FileFilter(){
public boolean accept(File f) {
if (f.getName().endsWith(&xls&) || f.isDirectory()) {
public String getDescription() {
return &Excel文件(*.xls)&;
//打开对话框
int result = chooser.showSaveDialog(null);//null
//文件确定
if(result==JFileChooser.APPROVE_OPTION) {
File file = chooser.getSelectedFile();
if (!file.getName().toLowerCase().endsWith(&.xls&)) {
file = new File(file.getParent(), file.getName() + &.xls&);
String outPath = file.getAbsolutePath();
if(new File(outPath).exists()){
JOptionPane.showMessageDialog(null, &文件已经存在,请重命名?&);
return outP
后台的导出其实是最直接的,但是有一定的局限性,这里同样是调用方法resultSetToExcel(String[] headers, List list,
String sheetName) &head是头部的集合,list自然是对应的数据,这里的heads应该与list里的数据对应。
以上这行就是导出的方法,望对你们有帮助。
本文出自 “迎风飘来” 博客,请务必保留此出处
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10566次
排名:千里之外
原创:22篇
转载:54篇
(1)(5)(8)(12)(21)(8)(3)(3)(1)(5)(2)(5)(2)GOLDENGATE安装与数据复制流搭建配置(源库为实例,支...
本教程为 李华明 编著的iOS-Cocos2d游戏开发系列教程:教程涵盖关于i......
专题主要学习DirectX的初级编程入门学习,对Directx11的入门及初学者有......
&面向对象的JavaScript&这一说法多少有些冗余,因为JavaScript 语言本......
Windows7系统专题 无论是升级操作系统、资料备份、加强资料的安全及管......Jquery插件tableExport.js怎么兼容IE浏览器
[问题点数:40分]
Jquery插件tableExport.js怎么兼容IE浏览器
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。You are viewing an old version of this page. View the .
查询数据的excel导出功能应该是目前很多系统中的基本特性之一,对于如下图中的界面应该一点都不会陌生:
图表 16 Excel数据导出界面
dorado也对excel数据导出提供了支持,通过Export2ExcelCommand实现excel数据导出.
由于在dorado中,相关的数据都是通过dataset实现的,数据查询与数据分批下载都需要通过dataset向数据层请求和获得,于是Export2ExcelCommand的数据导出是基于dataset实现的,另外对于excel数据的导出格式,在dorado中利用了DataTable对象,利用DataTable的用户格式定制功能,例如动态改变列的顺序,动态改变列的标题,动态设定列是否可见等。这些都可以控制最终的excel数据导出格式。
更详细的内容参考文档&&dorado 5 ExcelReport 使用手册 v0.9.doc&&
使用Export2ExcelCommand数据导出的实现非常简单,查看如下的xml配置文件:
&Control id=&cmdDownloadExcel&
type=&Export2ExcelCommand&
dataset=&dsEmployee&
templateTable=&tableEmployee&&
&Parameters /&
&/Control&
其中关键的属性就是dataset与templateTable属性:
dataset用以指定excel数据的来源,系统执行时将以dataset作为服务获取导出数据;
templateTable指定导出模板,excel数据导出时将以该table目前的格式作为导出格式的参照;
dataset的指定很容易,只要选择当前视图模型中的相应dataset对象即可,而对于templateTable的格式控制来说,默认情况下Export2ExcelCommand使用该Table的默认格式实现到处,如图表13中的表格。
如何自定义导出格式
利用表格的属性页我们可以动态的控制Excel文件中输出的数据列和他们之间的顺序。 您可以利用表格的属性页或列拖动操作来改变表格的显示,从而改变Excel导出的格式。(在表格中按下Ctrl+T可以打开表格的属性页)
表格属性页如下图:
表格的属性页详细功能参考部分。
在服务器段动态生成Export2ExcelCommand
protected void initControls() throws Exception {
super.initControls();//系统默认函数,注意保留
Export2ExcelCommand cmdExport = (Export2ExcelCommand)createControl(&Export2ExcelCommand&, & cmdExport&);
cmdExport.setDataset(&dsEmployee&);
cmdExport.setTemplateTable(&tableEmployee&);
使用视图模型实现类提供的createControl方法创建Export2ExcelCommand对象,注意第一个参数用以指定组件的类型,第二个参数指定新建对象的id.
在服务器段获得View(视图模型)中定义的Export2ExcelCommand,并动态它的属性
protected void initControls() throws Exception {
super.initControls();//系统默认函数,注意保留
Export2ExcelCommand cmdExport = (Export2ExcelCommand)getControl(&cmdExport&);
cmdExport.setDataset(&dsEmployee&);
cmdExport.setTemplateTable(&tableEmployee&);
在上面的代码中可以看到通过实现类提供的getControl函数获得我们需要的组件对象,所需要的就是给它一个Export2ExcelCommand对象的id,注意开发时我们建议您直接在View的设计中添加一个空Export2ExcelCommand组件,这样我们就可以在initControls方法中通过getControl方法获得这个空的Export2ExcelCommand对象,并利用该对象提供的API进行各种设定和初始化的工作,如Export2ExcelCommand的setDataset(), setTemplateTable()方法。
主要属性说明
基本属性参考RequestCommand的
dataset用以指定excel数据的来源,系统执行时将以dataset作为服务获取导出数据
server-all(默认): 在服务端重新执行该Dataset,并导出结果集中的全部数据。
server-current-page: 在服务端重新执行该Dataset,并导出当前页的数据。
client-visible: 不在服务端重新执行该Dataset,导出当前客户端Dataset中所有可见的数据(除被删除记录外的全部数据)。
client-selected: 不在服务端重新执行该Dataset,导出当前客户端Dataset中所有被选中的数据。
templateTable
templateTable指定导出模板,excel数据导出时将以该table目前的格式作为导出格式的参照
利用表格的属性页我们可以动态的控制Excel文件中输出的数据列和他们之间的顺序。 您可以利用表格的属性页或列拖动操作来改变表格的显示,从而改变Excel导出的格式。(在表格中按下Ctrl+T可以打开表格的属性页)
exportMode
Excel导出模式:
output:导出后直接在浏览器中打开;
download: 导出后按照文件的方式下载到客户端
Excel导出后下载文件的文件名(exportMode为download才有效)
Excel导出的数据行数限制,可在此处输入数字加以控制,该属性为空或则为0则,导出全部的数据。某些情况下还要注意检查自己的数据层是否支持这种操作。
主要事件说明
参考RequestCommand的

我要回帖

更多关于 mysql export table 的文章

 

随机推荐