首先我用的技術是 poi
這是代碼,一個工具類得調用
public class WordUtil {
/**
* 基於模板文件導出 word 文檔,此方法主要是用來處理文檔中需要替換的文本內容,對圖片和表格無效
*
* @param templatePath
* 模板文件的路徑,要求路徑中要包含全名,並且模板文件只能是 07 及以上格式,即 docx 的文件
* @param destFilePath
* 導出文件的存放路徑,包含文件名,例如,E:/test/小區公告.docx
* @param data
* 用來替換文檔中預定義的字元串,要求預定義的字元串與 data 中的 key 值要相同
*/
public static void exportWordByTemplate(String templatePath,
String destFilePath, Map<String, String> data) {
FileOutputStream out = null;
XWPFDocument doc = null;
try {
doc = new XWPFDocument(POIXMLDocument.openPackage(templatePath));
List<XWPFRun> listRun;
List<XWPFParagraph> listParagraphs = doc.getParagraphs();
for (int i = 0; i < listParagraphs.size(); i++) {
listRun = listParagraphs.get(i).getRuns();
for (int j = 0; j < listRun.size(); j++) {
if (data.get(listRun.get(j).getText(0)) != null) {
String val = data.get(listRun.get(j).getText(0));
listRun.get(j).setText(val, 0);
}
}
}
File destFile = new File(destFilePath);
if (!destFile.getParentFile().exists()) {
destFile.getParentFile().mkdirs();
}
out = new FileOutputStream(destFilePath);
doc.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (out != null)
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 基於模板文件導出 word 文檔,該方法支持03格式,但是此方法只能保留文檔內容,不能保留文檔中的樣式和圖片,建議將模板使用 07 的格式保存
*
* @param templatePath
* 模板文件的路徑
* @param destFilePath
* 導出文件的存放路徑,包含文件名,例如,E:/test/小區公告.doc
* @param data
* 用來替換文檔中預定義的字元串,要求預定義的字元串與 data 中的 key 值要相同
*/
public static void export03WordByTemplate(String templatePath,
String destFilePath, Map<String, String> data) {
try {
WordExtractor doc = new WordExtractor(new FileInputStream(
templatePath));
String content = doc.getText();
for (String key : data.keySet()) {
content = content.replaceAll(key, data.get(key));
}
byte b[] = content.getBytes();
ByteArrayInputStream s = new ByteArrayInputStream(b);
POIFSFileSystem fs = new POIFSFileSystem();
DirectoryEntry directory = fs.getRoot();
directory.createDocument("WordDocument", s);
FileOutputStream ostream = new FileOutputStream(destFilePath);
fs.writeFilesystem(ostream);
s.close();
ostream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
Map<String, String> maps = new HashMap<String, String>();
maps.put("appellation", "萬達公寓業主:");
maps.put(
"main_body",
"輸出的內容");
maps.put("date", "2013年1月23日");
exportWordByTemplate("E:/sss 2.docx", "E:/test/test.doc", maps);
}
}
"E:/sss 2.docx 模板存放的地址。
E:/test/test.doc 新生成的地址。
B. java如何根據word模板生成word文檔
先下載jacob_1.10.1.zip。
解壓後將jacob.dll放到windows/system32下面或\j2sdk\bin下面。
將jacob.jar加入項目。
/*
* Java2word.java
*
* Created on 2007年8月13日, 上午10:32
*
* To
change this template, choose Tools | Template Manager
* and open the template
in the editor.
*/
/*
* 傳入數據為HashMap對象,對象中的Key代表word模板中要替換的欄位,Value代表用來替換的值。
*
word模板中所有要替換的欄位(即HashMap中的Key)以特殊字元開頭和結尾,如:$code$、$date$……,
以免執行錯誤的替換。
*
所有要替換為圖片的欄位,Key中需包含image或者Value為圖片的全路徑(目前只判斷文件後綴名為:.bmp、
.jpg、.gif)。
*
要替換表格中的數據時,HashMap中的Key格式為「table$R@N」,其中:R代表從表格的第R行開始替換,N代表
word模板中的第N張表格;Value為ArrayList對象,ArrayList中包含的對象統一為String[],一條String[]代
表一行數據,ArrayList中第一條記錄為特殊記錄,記錄的是表格中要替換的列號,如:要替換第一列、第三列、
第五列的數據,則第一條記錄為String[3]
{「1」,」3」,」5」}。
*/
package com.word.util;
/**
*
* @author kdl
*/
import java.util.ArrayList;
import
java.util.HashMap;
import java.util.Iterator;
import com.jacob.activeX.ActiveXComponent;
import
com.jacob.com.Dispatch;
import com.jacob.com.Variant;
public class Java2word {
private boolean saveOnExit;
/**
* word文檔
*/
Dispatch doc = null;
/**
* word運行程序對象s
*/
private ActiveXComponent
word;
/**
* 所有word文檔
*/
private Dispatch
documents;
/**
* 構造函數
*/
public Java2word() {
if(word==null){
word = new
ActiveXComponent("Word.Application");
word.setProperty("Visible",new
Variant(false));
}
if(documents==null)
documents = word.getProperty("Documents").toDispatch();
saveOnExit =
false;
}
/**
* 設置參數:退出時是否保存
* @param
saveOnExit boolean true-退出時保存文件,false-退出時不保存文件
*/
public void
setSaveOnExit(boolean saveOnExit) {
this.saveOnExit =
saveOnExit;
}
/**
* 得到參數:退出時是否保存
* @return
boolean true-退出時保存文件,false-退出時不保存文件
*/
public boolean
getSaveOnExit() {
return saveOnExit;
}
/**
* 打開文件
* @param inputDoc String 要打開的文件,全路徑
*
@return Dispatch 打開的文件
*/
public Dispatch open(String inputDoc)
{
return
Dispatch.call(documents,"Open",inputDoc).toDispatch();
//return
Dispatch.invoke(documents,"Open",Dispatch.Method,new Object[]{inputDoc},new
int[1]).toDispatch();
}
/**
* 選定內容
*
@return Dispatch 選定的范圍或插入點
*/
public Dispatch select()
{
return word.getProperty("Selection").toDispatch();
}
/**
* 把選定內容或插入點向上移動
* @param selection
Dispatch 要移動的內容
* @param count int 移動的距離
*/
public
void moveUp(Dispatch selection,int count) {
for(int i = 0;i <
count;i ++)
Dispatch.call(selection,"MoveUp");
}
/**
* 把選定內容或插入點向下移動
* @param selection
Dispatch 要移動的內容
* @param count int 移動的距離
*/
public
void moveDown(Dispatch selection,int count) {
for(int i = 0;i <
count;i ++)
Dispatch.call(selection,"MoveDown");
}
/**
* 把選定內容或插入點向左移動
* @param selection
Dispatch 要移動的內容
* @param count int 移動的距離
*/
public
void moveLeft(Dispatch selection,int count) {
for(int i = 0;i <
count;i ++) {
Dispatch.call(selection,"MoveLeft");
}
}
/**
* 把選定內容或插入點向右移動
* @param
selection Dispatch 要移動的內容
* @param count int 移動的距離
*/
public void moveRight(Dispatch selection,int count) {
for(int i =
0;i < count;i ++)
Dispatch.call(selection,"MoveRight");
}
/**
*
把插入點移動到文件首位置
* @param selection Dispatch 插入點
*/
public
void moveStart(Dispatch selection) {
Dispatch.call(selection,"HomeKey",new Variant(6));
}
/**
* 從選定內容或插入點開始查找文本
* @param selection Dispatch
選定內容
* @param toFindText String 要查找的文本
* @return boolean
true-查找到並選中該文本,false-未查找到文本
*/
public boolean find(Dispatch
selection,String toFindText) {
//從selection所在位置開始查詢
Dispatch find = word.call(selection,"Find").toDispatch();
//設置要查找的內容
Dispatch.put(find,"Text",toFindText);
//向前查找
Dispatch.put(find,"Forward","True");
//設置格式
Dispatch.put(find,"Format","True");
//大小寫匹配
Dispatch.put(find,"MatchCase","True");
//全字匹配
Dispatch.put(find,"MatchWholeWord","True");
//查找並選中
return Dispatch.call(find,"Execute").getBoolean();
}
/**
* 把選定內容替換為設定文本
* @param selection
Dispatch 選定內容
* @param newText String 替換為文本
*/
public
void replace(Dispatch selection,String newText) {
//設置替換文本
Dispatch.put(selection,"Text",newText);
}
/**
* 全局替換
* @param selection Dispatch
選定內容或起始插入點
* @param oldText String 要替換的文本
* @param newText
String 替換為文本
*/
public void replaceAll(Dispatch
selection,String oldText,Object replaceObj) {
//移動到文件開頭
moveStart(selection);
if(oldText.startsWith("table") ||
replaceObj instanceof ArrayList)
replaceTable(selection,oldText,(ArrayList) replaceObj);
else
{
String newText = (String) replaceObj;
if(newText==null)
newText="";
if(oldText.indexOf("image") != -1&!newText.trim().equals("") ||
newText.lastIndexOf(".bmp") != -1 || newText.lastIndexOf(".jpg") != -1 ||
newText.lastIndexOf(".gif") != -1){
while(find(selection,oldText)) {
replaceImage(selection,newText);
Dispatch.call(selection,"MoveRight");
}
}else{
while(find(selection,oldText))
{
replace(selection,newText);
Dispatch.call(selection,"MoveRight");
}
}
}
}
/**
* 替換圖片
* @param
selection Dispatch 圖片的插入點
* @param imagePath String 圖片文件(全路徑)
*/
public void replaceImage(Dispatch selection,String imagePath)
{
Dispatch.call(Dispatch.get(selection,"InLineShapes").toDispatch(),"AddPicture",imagePath);
}
/**
* 替換表格
* @param selection Dispatch
插入點
* @param tableName String
表格名稱,形如table$1@1、[email protected]$R@N,R代表從表格中的第N行開始填充,N代表word文件中的第N張表
* @param fields HashMap 表格中要替換的欄位與數據的對應表
*/
public void
replaceTable(Dispatch selection,String tableName,ArrayList dataList)
{
if(dataList.size() <= 1) {
System.out.println("Empty table!");
return;
}
//要填充的列
String[] cols = (String[])
dataList.get(0);
//表格序號
String tbIndex =
tableName.substring(tableName.lastIndexOf("@") + 1);
//從第幾行開始填充
int fromRow =
Integer.parseInt(tableName.substring(tableName.lastIndexOf("$") +
1,tableName.lastIndexOf("@")));
//所有表格
Dispatch tables =
Dispatch.get(doc,"Tables").toDispatch();
//要填充的表格
Dispatch table = Dispatch.call(tables,"Item",new
Variant(tbIndex)).toDispatch();
//表格的所有行
Dispatch rows =
Dispatch.get(table,"Rows").toDispatch();
//填充表格
for(int
i = 1;i < dataList.size();i ++) {
//某一行數據
String[] datas = (String[]) dataList.get(i);
//在表格中添加一行
if(Dispatch.get(rows,"Count").getInt() < fromRow +
i - 1)
Dispatch.call(rows,"Add");
//填充該行的相關列
for(int j = 0;j < datas.length;j ++)
{
//得到單元格
Dispatch cell =
Dispatch.call(table,"Cell",Integer.toString(fromRow + i -
1),cols[j]).toDispatch();
//選中單元格
Dispatch.call(cell,"Select");
//設置格式
Dispatch font = Dispatch.get(selection,"Font").toDispatch();
Dispatch.put(font,"Bold","0");
Dispatch.put(font,"Italic","0");
//輸入數據
Dispatch.put(selection,"Text",datas[j]);
}
}
}
/**
* 保存文件
* @param outputPath String
輸出文件(包含路徑)
*/
public void save(String outputPath) {
Dispatch.call(Dispatch.call(word,"WordBasic").getDispatch(),"FileSaveAs",outputPath);
}
/**
* 關閉文件
* @param document Dispatch
要關閉的文件
*/
public void close(Dispatch doc) {
Dispatch.call(doc,"Close",new Variant(saveOnExit));
word.invoke("Quit",new Variant[]{});
word = null;
}
/**
* 根據模板、數據生成word文件
* @param inputPath
String 模板文件(包含路徑)
* @param outPath String 輸出文件(包含路徑)
* @param
data HashMap 數據包(包含要填充的欄位、對應的數據)
*/
public void toWord(String
inputPath,String outPath,HashMap data) {
String oldText;
Object newValue;
try {
if(doc==null)
doc = open(inputPath);
Dispatch selection =
select();
Iterator keys =
data.keySet().iterator();
while(keys.hasNext())
{
oldText = (String) keys.next();
newValue = data.get(oldText);
replaceAll(selection,oldText,newValue);
}
save(outPath);
} catch(Exception
e) {
System.out.println("操作word文件失敗!");
e.printStackTrace();
} finally {
if(doc !=
null)
close(doc);
}
}
C. java動態生成word,該怎麼解決
閱讀目錄
1. 製作 Word 模版,將你需要動態生成的欄位用${}替換。
2. 將 Word文檔保存為 xml 。
3.引入項目。
項目中需要用 java 程序生成doc 文件,網路一番,發現FreeMarker 的評價比較高。
FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出,至於想詳細了解 FreeMarker 的請自行網路。
製作 Word 模版,將你需要動態生成的欄位用${}替換。如:${name}、${age}
將 Word文檔保存為 xml。
引入項目。將 xml 文件更改後綴名 為 .ftl, 然後引用到你的項目中。
需要注意的問題:
a. word 版本不能低於 2003 ,因為 2003 才開始支持 xml。
備註:
a.template.process(),接受一個 Map 和 輸入流做為入參,Map 既是你需要動態生成到 doc 裡面的數據,欄位名必須與你在 .ftl 裡面定義的一致;
b.如果你想利用這段代碼,需要有一個 .ftl 文件,並且在你的項目 src 目錄下面新建 template 目錄;
c.輔助文件"FreeMarker.jar 、實例項目的.ftl "。
D. 怎麼用java導出word
java導出word代碼如下:
package com.bank.util;
import java.awt.Color;
import java.io.FileOutputStream;
import java.io.IOException;
import com.lowagie.text.Cell;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Element;
import com.lowagie.text.Font;
import com.lowagie.text.FontFactory;
import com.lowagie.text.Image;
import com.lowagie.text.PageSize;
import com.lowagie.text.Paragraph;
import com.lowagie.text.Phrase;
import com.lowagie.text.Table;
import com.lowagie.text.pdf.BaseFont;
import com.lowagie.text.rtf.RtfWriter2;
public class WordTools {
public void createDocContext(String file) throws DocumentException,
IOException {
// 設置紙張大小
Document document = new Document(PageSize.A4);
// 建立一個書寫器(Writer)與document對象關聯,通過書寫器(Writer)可以將文檔寫入到磁碟中
RtfWriter2.getInstance(document, new FileOutputStream(file));
document.open();
// 設置中文字體
BaseFont bfChinese = BaseFont.createFont("STSongStd-Light",
"UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
// 標題字體風格
Font titleFont = new Font(bfChinese, 12, Font.BOLD);
// 正文字體風格
Font contextFont = new Font(bfChinese, 10, Font.NORMAL);
Paragraph title = new Paragraph("標題");
// 設置標題格式對齊方式
title.setAlignment(Element.ALIGN_CENTER);
title.setFont(titleFont);
document.add(title);
String contextString = "iText是一個能夠快速產生PDF文件的java類庫。"
+ " \n"// 換行
+ "iText的java類對於那些要產生包含文本,"
+ "表格,圖形的只讀文檔是很有用的。它的類庫尤其與java Servlet有很好的給合。"
+ "使用iText與PDF能夠使你正確的控制Servlet的輸出。";
Paragraph context = new Paragraph(contextString);
// 正文格式左對齊
context.setAlignment(Element.ALIGN_LEFT);
context.setFont(contextFont);
// 離上一段落(標題)空的行數
context.setSpacingBefore(5);
// 設置第一行空的列數
context.setFirstLineIndent(20);
document.add(context);
//利用類FontFactory結合Font和Color可以設置各種各樣字體樣式
/**
* Font.UNDERLINE 下劃線,Font.BOLD 粗體
*/
Paragraph underline = new Paragraph("下劃線的實現", FontFactory.getFont(
FontFactory.HELVETICA_BOLDOBLIQUE, 18, Font.UNDERLINE,
new Color(0, 0, 255)));
document.add(underline);
// 設置 Table 表格
Table aTable = new Table(3);
int width[] = {25,25,50};
aTable.setWidths(width);//設置每列所佔比例
aTable.setWidth(90); // 占頁面寬度 90%
aTable.setAlignment(Element.ALIGN_CENTER);//居中顯示
aTable.setAlignment(Element.ALIGN_MIDDLE);//縱向居中顯示
aTable.setAutoFillEmptyCells(true); //自動填滿
aTable.setBorderWidth(1); //邊框寬度
aTable.setBorderColor(new Color(0, 125, 255)); //邊框顏色
aTable.setPadding(0);//襯距,看效果就知道什麼意思了
aTable.setSpacing(0);//即單元格之間的間距
aTable.setBorder(2);//邊框
//設置表頭
/**
* cell.setHeader(true);是將該單元格作為表頭信息顯示;
* cell.setColspan(3);指定了該單元格佔3列;
* 為表格添加表頭信息時,要注意的是一旦表頭信息添加完了之後, \
* 必須調用 endHeaders()方法,否則當表格跨頁後,表頭信息不會再顯示
*/
Cell haderCell = new Cell("表格表頭");
haderCell.setHeader(true);
haderCell.setColspan(3);
aTable.addCell(haderCell);
aTable.endHeaders();
Font fontChinese = new Font(bfChinese, 12, Font.NORMAL, Color.GREEN);
Cell cell = new Cell(new Phrase("這是一個測試的 3*3 Table 數據", fontChinese ));
cell.setVerticalAlignment(Element.ALIGN_TOP);
cell.setBorderColor(new Color(255, 0, 0));
cell.setRowspan(2);
aTable.addCell(cell);
aTable.addCell(new Cell("#1"));
aTable.addCell(new Cell("#2"));
aTable.addCell(new Cell("#3"));
aTable.addCell(new Cell("#4"));
Cell cell3 = new Cell(new Phrase("一行三列數據", fontChinese ));
cell3.setColspan(3);
cell3.setVerticalAlignment(Element.ALIGN_CENTER);
aTable.addCell(cell3);
document.add(aTable);
document.add(new Paragraph("\n"));
//添加圖片
// Image img=Image.getInstance("http://127.0.0.1:8080/testSystem/images/1_r1_c1.png");
// img.setAbsolutePosition(0, 0);
// img.setAlignment(Image.RIGHT);//設置圖片顯示位置
// img.scaleAbsolute(12,35);//直接設定顯示尺寸
// img.scalePercent(50);//表示顯示的大小為原尺寸的50%
// img.scalePercent(25, 12);//圖像高寬的顯示比例
// img.setRotation(30);//圖像旋轉一定角度
// document.add(img);
document.close();
}
public static void main(String[] args){
WordTools b=new WordTools();
try {
b.createDocContext("d:/demo.doc");
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
E. java動態生成word,該怎麼解決
首先,通過xml模板可以將基本上所有的格式都事先鎖定,包括頁碼和分頁,只要你事先預設好就能夠通過freemarker實現生成,
接下來就是我這個問題了,目錄怎麼解決,下面是解決思路:
1:目錄的內容可以根據之前其他的內容一樣解決,通過xml模板預先設置好,
2:目錄的頁碼已經研究過是不能直接通過xml模板實現動態對應了(至少我沒搞定0.0)
3:由於不能夠一步到位,我採取了在模板中預留了一頁空白頁,只留了抬頭的目錄兩個字,然後通過查詢目錄二字進行目錄的生成,
這個功能也是我剛剛折騰出來的0.0目前還沒測試能不能用模板生成目錄後再更新目錄0.0,不過想想可以直接生成目錄應該就不用這么麻煩了,至於word生成後的修改0.0我覺得還是以後再說吧.....
整體來說應該還算完美解決了,代碼我就不在這貼出來了~
雖然中間折騰了半天走了半天彎路~
講道理還是用的jacob來實現的。。
F. java中如何導出word
如果電腦里裝的有WORD,可以通過JS新建一個WORD,並把頁面文件拷貝進去。我這有操作Excel的,word的差不多。<input type="button" onclick="javascript:method1('tableExcel');" value="導入到EXCEL"> <SCRIPT LANGUAGE="javascript"> function method1(tableid) {//整個表格拷貝到EXCEL中 var curTbl = document.getElementById(tableid); var oXL = new ActiveXObject("Excel.Application"); //創建AX對象excel var oWB = oXL.Workbooks.Add(); //獲取workbook對象 var oSheet = oWB.ActiveSheet; //激活當前sheet var sel = document.body.createTextRange(); sel.moveToElementText(curTbl); //把表格中的內容移到TextRange中 sel.select(); //全選TextRange中內容 sel.execCommand("Copy"); //復制TextRange中內容 oSheet.Paste(); //粘貼到活動的EXCEL中 oXL.Visible = true; //設置excel可見屬性 } function method2(tableid) //讀取表格中每個單元到EXCEL中 { var curTbl = document.getElementById(tableid); var oXL = new ActiveXObject("Excel.Application"); //創建AX對象excel var oWB = oXL.Workbooks.Add(); //獲取workbook對象 var oSheet = oWB.ActiveSheet; //激活當前sheet var Lenr = curTbl.rows.length; //取得表格行數 for (i = 0; i < Lenr; i++) { var Lenc = curTbl.rows(i).cells.length; //取得每行的列數 for (j = 0; j < Lenc; j++) { oSheet.Cells(i + 1, j + 1).value = curTbl.rows(i).cells(j).innerText; //賦值 } } oXL.Visible = true; //設置excel可見屬性 } function getXlsFromTbl(inTblId, inWindow) { try { var allStr = ""; var curStr = ""; //alert("getXlsFromTbl"); if (inTblId != null && inTblId != "" && inTblId != "null") { curStr = getTblData(inTblId, inWindow); } if (curStr != null) { allStr += curStr; } else { alert("你要導出的表不存在!"); return; } var fileName = getExcelFileName(); doFileExport(fileName, allStr); } catch(e) { alert("導出發生異常:" + e.name + "->" + e.description + "!"); } } function getTblData(inTbl, inWindow) { var rows = 0; //alert("getTblData is " + inWindow); var tblDocument = document; if (!!inWindow && inWindow != "") { if (!document.all(inWindow)) { return null; } else { tblDocument = eval(inWindow).document; } } var curTbl = tblDocument.getElementById(inTbl); var outStr = ""; if (curTbl != null) { for (var j = 0; j < curTbl.rows.length; j++) { //alert("j is " + j); for (var i = 0; i < curTbl.rows[j].cells.length; i++) { //alert("i is " + i); if (i == 0 && rows > 0) { outStr += " \t"; rows -= 1; } outStr += curTbl.rows[j].cells[i].innerText + "\t"; if (curTbl.rows[j].cells[i].colSpan > 1) { for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) { outStr += " \t"; } } if (i == 0) { if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) { rows = curTbl.rows[j].cells[i].rowSpan - 1; } } } outStr += "\r\n"; } } else { outStr = null; alert(inTbl + "不存在!"); } return outStr; } function getExcelFileName() { var d = new Date(); var curYear = d.getYear(); var curMonth = "" + (d.getMonth() + 1); var curDate = "" + d.getDate(); var curHour = "" + d.getHours(); var curMinute = "" + d.getMinutes(); var curSecond = "" + d.getSeconds(); if (curMonth.length == 1) { curMonth = "0" + curMonth; } if (curDate.length == 1) { curDate = "0" + curDate; } if (curHour.length == 1) { curHour = "0" + curHour; } if (curMinute.length == 1) { curMinute = "0" + curMinute; } if (curSecond.length == 1) { curSecond = "0" + curSecond; } var fileName = "leo_zhang" + "_" + curYear + curMonth + curDate + "_" + curHour + curMinute + curSecond + ".csv"; //alert(fileName); return fileName; } function doFileExport(inName, inStr) { var xlsWin = null; if (!!document.all("glbHideFrm")) { xlsWin = glbHideFrm; } else { var width = 6; var height = 4; var openPara = "left=" + (window.screen.width / 2 - width / 2) + ",top=" + (window.screen.height / 2 - height / 2) + ",scrollbars=no,width=" + width + ",height=" + height; xlsWin = window.open("", "_blank", openPara); } xlsWin.document.write(inStr); xlsWin.document.close(); xlsWin.document.execCommand('Saveas', true, inName); xlsWin.close(); } </SCRIPT>]
G. java freemarker 通過ftl模板導出word文檔
循環列表需要加<#list datas as bean></#list>標簽的;