我使用的版本如下:测试正常
Windows XP Professional SP2
jacob_1.9 (jacob.dll需放在windows/system32底下)
JDK 1.5
Tomcat 5.0.27
以下是我写的程序
<%@ page contentType="text/html;charset=MS950" %>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.util.Date"%>
<%@ page import="java.text.DateFormat"%>
<%@ page import="java.text.SimpleDateFormat"%>
<%@ page import="java.text.*"%>
<%@ page import="java.sql.*"%>
<%@ page import="org.apache.poi.util.*"%>
<%@ page import="java.io.File"%>
<%@ page import="com.jacob.com.*"%>
<%@ page import="com.jacob.activeX.*"%>
<%@ page import="com.chttl.ia.audit.WordExtractor" %>
<%
String title = "報告內容";
//這邊的字串內容模擬從資料庫所撈取
ArrayList all_arr = new ArrayList();
ArrayList arr1 = new ArrayList();
ArrayList arr2 = new ArrayList();
ArrayList arr3 = new ArrayList();
ArrayList arr4 = new ArrayList();
ArrayList arr5 = new ArrayList();
arr1.add("一、1111詳察具復之 ");
arr1.add("總公司>董事長室回覆:申覆處理或申述查明情由與");
arr1.add("擬辦: 本案擬結案。 1111");
arr2.add("二、金融商品買賣作業1詳察具復之");
arr2.add("總公司>董事長室回覆:申覆處理或申述查明情由與");
arr2.add("擬辦: 本案擬結案。 tttt申覆處理或申述查明情由");
arr3.add("三、CI-101(金融商品買賣作業):詳察具復之");
arr3.add("總公司>董事長室回覆:申覆處理或申述查明情由與");
arr3.add("擬辦: 本案擬結案。 31231");
arr4.add("四、標題詳察具復之 ");
arr4.add("總公司>董事長室回覆:申覆處理或申述查明情由與");
arr4.add("擬辦: 本案擬結案。擬辦");
arr5.add("五、12312");
arr5.add("擬辦: 本案擬結案。碁碁碁珮許功蓋");
all_arr.add(arr1);
all_arr.add(arr2);
all_arr.add(arr3);
all_arr.add(arr4);
all_arr.add(arr5);
String otFile = request.getRealPath("/")+"TEST"+File.separator+"sample"+File.separator+"TestDoc.doc"; //目標文件位置
WordExtractor word=new WordExtractor(); //建立一個WordExtractor物件
word.openWord(true); //設定word開啟顯示
word.createNewDocument(); //建立文件內容
word.insertText(title,all_arr); //要insert入word的內容集合
word.saveFileAs(otFile); //檔案另存
//word.printFile(); //檔案列印(會直接印,頁尾未能格式化後才印)
%>
Windows XP Professional SP2
jacob_1.9 (jacob.dll需放在windows/system32底下)
JDK 1.5
Tomcat 5.0.27
以下是我写的程序
package com.chttl.ia.audit;
import com.jacob.activeX.*;
import com.jacob.com.*;
import java.util.*;
import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import com.chttl.ia.util.Tool;
public class WordExtractor extends java.awt.Panel
{
//建立一個word物件
private ActiveXComponent MsWordApp = null;
//建立兩個word組件
private Dispatch document = null;
private Dispatch selection = null;
//建構子
public WordExtractor()
{
super();
}
/**
* 開啟word檔案
*
* @param makeVisible 顯示不顯示(true:顯示;false:不顯示)
*
*/
public void openWord(boolean makeVisible)
{
//打開word(如果word未開啟時)
if (MsWordApp == null)
{
MsWordApp = new ActiveXComponent("Word.Application");
}
//設置word是可見或不可見(true:顯示;false:不顯示)
Dispatch.put(MsWordApp, "Visible",new Variant(makeVisible));
}
/**
* 建立word的文本內容
*
*/
public void createNewDocument()
{
//建立一個Dispatch物件
Dispatch documents = Dispatch.get(MsWordApp,"Documents").toDispatch();
document = Dispatch.call(documents,"Add").toDispatch();
}
/**
* 格式化時間字串
*
*@param date_str 原始時間字串
*@return 修改後的字串
*
*/
public String ReplaceDateStr(String date_str)
{
String str = "";
String[] date_str_arr = Tool.splitString(date_str,"-");
if(date_str_arr.length > 0)
{
str = date_str_arr[0] + "/" + date_str_arr[1] + "/" + date_str_arr[2];
}
else
{
str = date_str;
}
return str;
}
/**
* 寫入資料到word中
*
* @param title 本文標題
* @param textToInsertarr 要寫入的內容陣列集合
*
*/
public void insertText(String title,ArrayList textToInsertarr)
{
selection = Dispatch.get(MsWordApp,"Selection").toDispatch(); //輸入內容需要的物件
Dispatch alignment = Dispatch.get(selection, "ParagraphFormat").toDispatch(); //行列格式化需要的物件
Dispatch font = Dispatch.get(selection, "Font").toDispatch(); //字型格式化需要的物件
Dispatch font1 = Dispatch.get(selection, "Font").toDispatch(); //字型格式化需要的物件
//Dispatch image = Dispatch.get(selection, "InLineShapes").toDispatch(); //放入圖片需要的物件
//String mm = "D:"+File.separator+"IRMAS_COMBINE"+File.separator+"images"+File.separator+"mis_login.jpg"; //圖片來源路徑
//格式化時間
java.util.Date ddate = new Date();
SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MM月-yy", java.util.Locale.TRADITIONAL_CHINESE); //oracle要的時間格式
Timestamp ts1 = new Timestamp(ddate.getTime());
String date_str = (ts1.toString()).substring(0,10);
String result_str = ReplaceDateStr(date_str); //格式化後的時間
//文件標題
//Dispatch.call(selection, "TypeParagraph"); //空一行段落
Dispatch.put(alignment, "Alignment", "1"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(font1, "Bold", "1"); //字型租體
Dispatch.put(font1, "Color", "1,0,0,0"); //字型顏色(1,0,0,0=>紅色 1,1,0,0=>棕色)
//Dispatch.put(font, "Italic", "1"); //字型斜體
Dispatch.call(selection, "TypeText", title); //寫入標題內容
//標題格行
Dispatch.call(selection, "TypeParagraph"); //空一行段落
Dispatch.put(alignment, "Alignment", "3"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(selection,"Text"," ");
Dispatch.call(selection, "MoveDown"); //游標往下一行
//插入圖片
/*
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(alignment, "Alignment", "2"); //(1:置中 2:靠右 3:靠左)
Dispatch.call(image, "AddPicture", mm); //寫入圖片
*/
/*--------不輸入到表格時------------
//主要內容(即參數陣列中的值)
for(int i=0;i<textToInsertarr.size();i++)
{
String arr_tostr = textToInsertarr.get(i).toString();
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //去掉前後'['和']'
String[] arr_split = arr_substr.split(","); //字串陣列(在分隔每個元素值)
for(int j=0;j<arr_split.length;j++)
{
//主要內容
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(selection, "Text", arr_split[j]); //寫入word的內容
Dispatch.put(font, "Bold", "0"); //字型租體(1:租體 0:取消租體)
//Dispatch.put(font, "Italic", "1"); //字型斜體(1:斜體 0:取消斜體)
//Dispatch.put(font, "Underline", "1"); //文字加底線(1:加底線 0:不加底線)
Dispatch.call(selection, "MoveDown"); //游標往下一行(才不會蓋過上一輸入的位置)
}
//每寫入一次資料空一行,以區隔之用
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(selection, "Text", " ");
Dispatch.call(selection, "MoveDown"); //游標往下一行
}
*/
//依參數內的陣列元素總個數計算要輸入到表格的列數
int all_count = 0;
for(int p=0;p<textToInsertarr.size();p++)
{
String arr_tostr = textToInsertarr.get(p).toString(); //先將陣列元素轉成字串
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //去掉前後'['和']'
String[] arr_split = arr_substr.split(","); //字串陣列(在分隔每個元素值)
int num = arr_split.length;
all_count += num; //累加個數
}
//建立表格
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
Dispatch range = Dispatch.get(selection, "Range").toDispatch();
Dispatch newTable = Dispatch.call(tables,"Add",range,new Variant(all_count),new Variant(1),new Variant(1)).toDispatch(); //設置列數,欄數,表格外框寬度
Dispatch.call(selection, "MoveRight"); //游標移到最右邊
putTxtToCell(font,alignment,1,1,1,textToInsertarr); //表格內寫入內容(從第1列第1欄開始)
//mergeCell(1,1,1,all_count,1); //表格合併(從第1列第1欄開始,第X列第1欄結束)
//autoFitTable(); //自動調整表格
int count = 0; //計算合併表格後的列數遞增(例如:前五列合併成一列,則往下繼續合併時,要考慮加上合併後的那一列)
//依陣列筆數合併表格
for(int k=0;k<textToInsertarr.size();k++)
{
String arr_tostr = textToInsertarr.get(k).toString(); //先將陣列元素轉成字串
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //去掉前後'['和']'
String[] arr_split = arr_substr.split(","); //字串陣列(在分隔每個元素值)
int num = arr_split.length;
if(k == 0)
{ //第一次合併時,num值不需加前一列
mergeCell(1,k+1,1,num,1);
count++;
}
else
{ //第二次合併之後,num值要加前一列,以此類推...
mergeCell(1,k+1,1,num+count,1);
count++;
}
}
//取消選擇(因為最後insert進去的文字會顯示反白,所以要取消)
Dispatch.call(selection,"MoveRight",new Variant(1),new Variant(1));
//插入頁首頁尾
//取得活動窗體對象
Dispatch ActiveWindow = MsWordApp.getProperty("ActiveWindow").toDispatch();
//取得活動窗格對象
Dispatch ActivePane = Dispatch.get(ActiveWindow,"ActivePane").toDispatch();
//取得視窗對象
Dispatch View = Dispatch.get(ActivePane,"View").toDispatch();
//9是設置頁首(游標所在處)
Dispatch.put(View,"SeekView","9"); //頁首中的資訊
Dispatch.put(alignment, "Alignment", "2"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(selection,"Text",result_str); //初始化時間
//10是設置頁尾(游標所在處)
Dispatch.put(View,"SeekView","10"); //頁尾中的資訊
Dispatch.put(alignment, "Alignment", "1"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(selection,"Text",new Variant(1)); //初始化從1開始
}
/**
* 合併表格
*
* @param tableIndex 表格起始點
* @param fstCellRowIdx 開始列
* @param fstCellColIdx 開始欄
* @param secCellRowIdx 結束列
* @param secCellColIdx 結束欄
*/
public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,int secCellRowIdx, int secCellColIdx)
{
// 所有表格
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();
Dispatch fstCell = Dispatch.call(table, "Cell",new Variant(fstCellRowIdx), new Variant(fstCellColIdx)).toDispatch();
Dispatch secCell = Dispatch.call(table, "Cell",new Variant(secCellRowIdx), new Variant(secCellColIdx)).toDispatch();
Dispatch.call(fstCell, "Merge", secCell);
}
/**
* 在指定的表格裡填入內容
*
* @param tableIndex 表格起始點
* @param cellRowIdx 第幾列
* @param cellColIdx 第幾欄
* @param txt 內容字串陣列
*/
public void putTxtToCell(Dispatch font,Dispatch alignment,int tableIndex, int cellRowIdx, int cellColIdx,ArrayList txt)
{
// 所有表格
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
//主要內容(即參數陣列中的值)
for(int i=0;i<txt.size();i++)
{
String arr_tostr = txt.get(i).toString(); //先將陣列元素轉成字串
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //去掉前後'['和']'
String[] arr_split = arr_substr.split(","); //字串陣列(在分隔每個元素值)
for(int j=0;j<arr_split.length;j++)
{
// 要填入的表格(對表格列依序填入內容),cellRowIdx++代表從第一列開始
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();
Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx++),new Variant(cellColIdx)).toDispatch();
//Dispatch.put(cell, "Height",new Variant(1)); //設置列高
Dispatch.call(cell, "Select");
//主要內容
//Dispatch.call(selection, "TypeParagraph"); //空一行段落
//Dispatch.put(alignment, "Alignment", "3"); //(1:置中 2:靠右 3:靠左)
if(j==0)
{
Dispatch.put(selection, "Text", arr_split[j]); //寫入word的內容
Dispatch.put(font, "Bold", "1"); //字型租體(1:租體 0:取消租體)
Dispatch.put(font, "Color", "1,1,1,1"); //字型顏色
//Dispatch.put(font, "Italic", "1"); //字型斜體(1:斜體 0:取消斜體)
//Dispatch.put(font, "Underline", "1"); //文字加底線
Dispatch.call(selection, "MoveDown"); //游標往下一行(才不會輸入蓋過上一輸入位置)
}
else
{
if(arr_split[j].indexOf(" ") != -1)
{
String str = arr_split[j].replaceAll(" "," "); //作字串隔行對齊用
Dispatch.call(selection, "TypeParagraph"); //空一行段落
Dispatch.put(alignment, "Alignment", "3"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(selection, "Text", str); //寫入word的內容
Dispatch.put(font, "Bold", "0"); //字型租體(1:租體 0:取消租體)
Dispatch.put(font, "Color", "1,1,1,0"); //字型顏色
//Dispatch.put(font, "Italic", "1"); //字型斜體(1:斜體 0:取消斜體)
//Dispatch.put(font, "Underline", "1"); //文字加底線
Dispatch.call(selection, "MoveDown"); //游標往下一行(才不會輸入蓋過上一輸入位置)
}
else
{
Dispatch.put(selection, "Text", arr_split[j]); //寫入word的內容
Dispatch.put(font, "Bold", "0"); //字型租體(1:租體 0:取消租體)
Dispatch.put(font, "Color", "1,1,1,0"); //字型顏色
//Dispatch.put(font, "Italic", "1"); //字型斜體(1:斜體 0:取消斜體)
//Dispatch.put(font, "Underline", "1"); //文字加底線
Dispatch.call(selection, "MoveDown"); //游標往下一行(才不會輸入蓋過上一輸入位置)
}
}
}
//每寫入一次資料空一行,以區隔之用
/*
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(selection, "Text", " ");
Dispatch.call(selection, "MoveDown"); //游標往下一行
*/
}
}
/**
* 自動調整表格
*
*/
public void autoFitTable()
{
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
int count = Dispatch.get(tables, "Count").toInt(); //word中的表格數量
for(int i=0;i<count;i++)
{
Dispatch table = Dispatch.call(tables, "Item", new Variant(i+1)).toDispatch();
Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
Dispatch.call(cols, "AutoFit");
}
}
/**
* 另存檔案
*
* @param filename 要儲存的檔案名稱
*
*/
public void saveFileAs(String filename)
{
Dispatch.call(document,"SaveAs",filename);
}
/**
* 列印word文件
*
*/
public void printFile()
{
Dispatch.call(document,"PrintOut");
}
/**
* 關閉文本內容(如果未開啟word編輯時,釋放ActiveX執行緒)
*
*/
public void closeDocument()
{
// 0 = 沒有儲存改變
// -1 = 有儲存改變
// -2 = 提示儲存改變
Dispatch.call(document, "Close", new Variant(0));
document = null;
}
/**
* 關閉word(如果未開啟word編輯時,釋放ActiveX執行緒)
*
*/
public void closeWord()
{
Dispatch.call(MsWordApp,"Quit");
MsWordApp = null;
document = null;
}
}
import com.jacob.activeX.*;
import com.jacob.com.*;
import java.util.*;
import java.text.SimpleDateFormat;
import java.sql.Timestamp;
import com.chttl.ia.util.Tool;
public class WordExtractor extends java.awt.Panel
{
//建立一個word物件
private ActiveXComponent MsWordApp = null;
//建立兩個word組件
private Dispatch document = null;
private Dispatch selection = null;
//建構子
public WordExtractor()
{
super();
}
/**
* 開啟word檔案
*
* @param makeVisible 顯示不顯示(true:顯示;false:不顯示)
*
*/
public void openWord(boolean makeVisible)
{
//打開word(如果word未開啟時)
if (MsWordApp == null)
{
MsWordApp = new ActiveXComponent("Word.Application");
}
//設置word是可見或不可見(true:顯示;false:不顯示)
Dispatch.put(MsWordApp, "Visible",new Variant(makeVisible));
}
/**
* 建立word的文本內容
*
*/
public void createNewDocument()
{
//建立一個Dispatch物件
Dispatch documents = Dispatch.get(MsWordApp,"Documents").toDispatch();
document = Dispatch.call(documents,"Add").toDispatch();
}
/**
* 格式化時間字串
*
*@param date_str 原始時間字串
*@return 修改後的字串
*
*/
public String ReplaceDateStr(String date_str)
{
String str = "";
String[] date_str_arr = Tool.splitString(date_str,"-");
if(date_str_arr.length > 0)
{
str = date_str_arr[0] + "/" + date_str_arr[1] + "/" + date_str_arr[2];
}
else
{
str = date_str;
}
return str;
}
/**
* 寫入資料到word中
*
* @param title 本文標題
* @param textToInsertarr 要寫入的內容陣列集合
*
*/
public void insertText(String title,ArrayList textToInsertarr)
{
selection = Dispatch.get(MsWordApp,"Selection").toDispatch(); //輸入內容需要的物件
Dispatch alignment = Dispatch.get(selection, "ParagraphFormat").toDispatch(); //行列格式化需要的物件
Dispatch font = Dispatch.get(selection, "Font").toDispatch(); //字型格式化需要的物件
Dispatch font1 = Dispatch.get(selection, "Font").toDispatch(); //字型格式化需要的物件
//Dispatch image = Dispatch.get(selection, "InLineShapes").toDispatch(); //放入圖片需要的物件
//String mm = "D:"+File.separator+"IRMAS_COMBINE"+File.separator+"images"+File.separator+"mis_login.jpg"; //圖片來源路徑
//格式化時間
java.util.Date ddate = new Date();
SimpleDateFormat sdf2 = new SimpleDateFormat("dd-MM月-yy", java.util.Locale.TRADITIONAL_CHINESE); //oracle要的時間格式
Timestamp ts1 = new Timestamp(ddate.getTime());
String date_str = (ts1.toString()).substring(0,10);
String result_str = ReplaceDateStr(date_str); //格式化後的時間
//文件標題
//Dispatch.call(selection, "TypeParagraph"); //空一行段落
Dispatch.put(alignment, "Alignment", "1"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(font1, "Bold", "1"); //字型租體
Dispatch.put(font1, "Color", "1,0,0,0"); //字型顏色(1,0,0,0=>紅色 1,1,0,0=>棕色)
//Dispatch.put(font, "Italic", "1"); //字型斜體
Dispatch.call(selection, "TypeText", title); //寫入標題內容
//標題格行
Dispatch.call(selection, "TypeParagraph"); //空一行段落
Dispatch.put(alignment, "Alignment", "3"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(selection,"Text"," ");
Dispatch.call(selection, "MoveDown"); //游標往下一行
//插入圖片
/*
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(alignment, "Alignment", "2"); //(1:置中 2:靠右 3:靠左)
Dispatch.call(image, "AddPicture", mm); //寫入圖片
*/
/*--------不輸入到表格時------------
//主要內容(即參數陣列中的值)
for(int i=0;i<textToInsertarr.size();i++)
{
String arr_tostr = textToInsertarr.get(i).toString();
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //去掉前後'['和']'
String[] arr_split = arr_substr.split(","); //字串陣列(在分隔每個元素值)
for(int j=0;j<arr_split.length;j++)
{
//主要內容
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(selection, "Text", arr_split[j]); //寫入word的內容
Dispatch.put(font, "Bold", "0"); //字型租體(1:租體 0:取消租體)
//Dispatch.put(font, "Italic", "1"); //字型斜體(1:斜體 0:取消斜體)
//Dispatch.put(font, "Underline", "1"); //文字加底線(1:加底線 0:不加底線)
Dispatch.call(selection, "MoveDown"); //游標往下一行(才不會蓋過上一輸入的位置)
}
//每寫入一次資料空一行,以區隔之用
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(selection, "Text", " ");
Dispatch.call(selection, "MoveDown"); //游標往下一行
}
*/
//依參數內的陣列元素總個數計算要輸入到表格的列數
int all_count = 0;
for(int p=0;p<textToInsertarr.size();p++)
{
String arr_tostr = textToInsertarr.get(p).toString(); //先將陣列元素轉成字串
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //去掉前後'['和']'
String[] arr_split = arr_substr.split(","); //字串陣列(在分隔每個元素值)
int num = arr_split.length;
all_count += num; //累加個數
}
//建立表格
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
Dispatch range = Dispatch.get(selection, "Range").toDispatch();
Dispatch newTable = Dispatch.call(tables,"Add",range,new Variant(all_count),new Variant(1),new Variant(1)).toDispatch(); //設置列數,欄數,表格外框寬度
Dispatch.call(selection, "MoveRight"); //游標移到最右邊
putTxtToCell(font,alignment,1,1,1,textToInsertarr); //表格內寫入內容(從第1列第1欄開始)
//mergeCell(1,1,1,all_count,1); //表格合併(從第1列第1欄開始,第X列第1欄結束)
//autoFitTable(); //自動調整表格
int count = 0; //計算合併表格後的列數遞增(例如:前五列合併成一列,則往下繼續合併時,要考慮加上合併後的那一列)
//依陣列筆數合併表格
for(int k=0;k<textToInsertarr.size();k++)
{
String arr_tostr = textToInsertarr.get(k).toString(); //先將陣列元素轉成字串
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //去掉前後'['和']'
String[] arr_split = arr_substr.split(","); //字串陣列(在分隔每個元素值)
int num = arr_split.length;
if(k == 0)
{ //第一次合併時,num值不需加前一列
mergeCell(1,k+1,1,num,1);
count++;
}
else
{ //第二次合併之後,num值要加前一列,以此類推...
mergeCell(1,k+1,1,num+count,1);
count++;
}
}
//取消選擇(因為最後insert進去的文字會顯示反白,所以要取消)
Dispatch.call(selection,"MoveRight",new Variant(1),new Variant(1));
//插入頁首頁尾
//取得活動窗體對象
Dispatch ActiveWindow = MsWordApp.getProperty("ActiveWindow").toDispatch();
//取得活動窗格對象
Dispatch ActivePane = Dispatch.get(ActiveWindow,"ActivePane").toDispatch();
//取得視窗對象
Dispatch View = Dispatch.get(ActivePane,"View").toDispatch();
//9是設置頁首(游標所在處)
Dispatch.put(View,"SeekView","9"); //頁首中的資訊
Dispatch.put(alignment, "Alignment", "2"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(selection,"Text",result_str); //初始化時間
//10是設置頁尾(游標所在處)
Dispatch.put(View,"SeekView","10"); //頁尾中的資訊
Dispatch.put(alignment, "Alignment", "1"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(selection,"Text",new Variant(1)); //初始化從1開始
}
/**
* 合併表格
*
* @param tableIndex 表格起始點
* @param fstCellRowIdx 開始列
* @param fstCellColIdx 開始欄
* @param secCellRowIdx 結束列
* @param secCellColIdx 結束欄
*/
public void mergeCell(int tableIndex, int fstCellRowIdx, int fstCellColIdx,int secCellRowIdx, int secCellColIdx)
{
// 所有表格
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
// 要填充的表格
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();
Dispatch fstCell = Dispatch.call(table, "Cell",new Variant(fstCellRowIdx), new Variant(fstCellColIdx)).toDispatch();
Dispatch secCell = Dispatch.call(table, "Cell",new Variant(secCellRowIdx), new Variant(secCellColIdx)).toDispatch();
Dispatch.call(fstCell, "Merge", secCell);
}
/**
* 在指定的表格裡填入內容
*
* @param tableIndex 表格起始點
* @param cellRowIdx 第幾列
* @param cellColIdx 第幾欄
* @param txt 內容字串陣列
*/
public void putTxtToCell(Dispatch font,Dispatch alignment,int tableIndex, int cellRowIdx, int cellColIdx,ArrayList txt)
{
// 所有表格
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
//主要內容(即參數陣列中的值)
for(int i=0;i<txt.size();i++)
{
String arr_tostr = txt.get(i).toString(); //先將陣列元素轉成字串
String arr_substr = arr_tostr.substring(1,arr_tostr.length()-1); //去掉前後'['和']'
String[] arr_split = arr_substr.split(","); //字串陣列(在分隔每個元素值)
for(int j=0;j<arr_split.length;j++)
{
// 要填入的表格(對表格列依序填入內容),cellRowIdx++代表從第一列開始
Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex)).toDispatch();
Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx++),new Variant(cellColIdx)).toDispatch();
//Dispatch.put(cell, "Height",new Variant(1)); //設置列高
Dispatch.call(cell, "Select");
//主要內容
//Dispatch.call(selection, "TypeParagraph"); //空一行段落
//Dispatch.put(alignment, "Alignment", "3"); //(1:置中 2:靠右 3:靠左)
if(j==0)
{
Dispatch.put(selection, "Text", arr_split[j]); //寫入word的內容
Dispatch.put(font, "Bold", "1"); //字型租體(1:租體 0:取消租體)
Dispatch.put(font, "Color", "1,1,1,1"); //字型顏色
//Dispatch.put(font, "Italic", "1"); //字型斜體(1:斜體 0:取消斜體)
//Dispatch.put(font, "Underline", "1"); //文字加底線
Dispatch.call(selection, "MoveDown"); //游標往下一行(才不會輸入蓋過上一輸入位置)
}
else
{
if(arr_split[j].indexOf(" ") != -1)
{
String str = arr_split[j].replaceAll(" "," "); //作字串隔行對齊用
Dispatch.call(selection, "TypeParagraph"); //空一行段落
Dispatch.put(alignment, "Alignment", "3"); //(1:置中 2:靠右 3:靠左)
Dispatch.put(selection, "Text", str); //寫入word的內容
Dispatch.put(font, "Bold", "0"); //字型租體(1:租體 0:取消租體)
Dispatch.put(font, "Color", "1,1,1,0"); //字型顏色
//Dispatch.put(font, "Italic", "1"); //字型斜體(1:斜體 0:取消斜體)
//Dispatch.put(font, "Underline", "1"); //文字加底線
Dispatch.call(selection, "MoveDown"); //游標往下一行(才不會輸入蓋過上一輸入位置)
}
else
{
Dispatch.put(selection, "Text", arr_split[j]); //寫入word的內容
Dispatch.put(font, "Bold", "0"); //字型租體(1:租體 0:取消租體)
Dispatch.put(font, "Color", "1,1,1,0"); //字型顏色
//Dispatch.put(font, "Italic", "1"); //字型斜體(1:斜體 0:取消斜體)
//Dispatch.put(font, "Underline", "1"); //文字加底線
Dispatch.call(selection, "MoveDown"); //游標往下一行(才不會輸入蓋過上一輸入位置)
}
}
}
//每寫入一次資料空一行,以區隔之用
/*
Dispatch.call(selection, "TypeParagraph");
Dispatch.put(selection, "Text", " ");
Dispatch.call(selection, "MoveDown"); //游標往下一行
*/
}
}
/**
* 自動調整表格
*
*/
public void autoFitTable()
{
Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
int count = Dispatch.get(tables, "Count").toInt(); //word中的表格數量
for(int i=0;i<count;i++)
{
Dispatch table = Dispatch.call(tables, "Item", new Variant(i+1)).toDispatch();
Dispatch cols = Dispatch.get(table, "Columns").toDispatch();
Dispatch.call(cols, "AutoFit");
}
}
/**
* 另存檔案
*
* @param filename 要儲存的檔案名稱
*
*/
public void saveFileAs(String filename)
{
Dispatch.call(document,"SaveAs",filename);
}
/**
* 列印word文件
*
*/
public void printFile()
{
Dispatch.call(document,"PrintOut");
}
/**
* 關閉文本內容(如果未開啟word編輯時,釋放ActiveX執行緒)
*
*/
public void closeDocument()
{
// 0 = 沒有儲存改變
// -1 = 有儲存改變
// -2 = 提示儲存改變
Dispatch.call(document, "Close", new Variant(0));
document = null;
}
/**
* 關閉word(如果未開啟word編輯時,釋放ActiveX執行緒)
*
*/
public void closeWord()
{
Dispatch.call(MsWordApp,"Quit");
MsWordApp = null;
document = null;
}
}
wordtest.jsp

























































