- 論壇徽章:
- 0
|
RT,用以下程序按模板生成新的word,執(zhí)行是可行的,但是現(xiàn)在需要循環(huán)替換模板文件,生成在同一個word上,則不行,只能執(zhí)行一次,為何?應(yīng)該如何修改?求高手指點。
模板已傳到附件中- package com.word;
- import java.io.File;
- import java.io.IOException;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.Iterator;
- import java.util.List;
- import java.util.HashMap;
- import com.jacob.activeX.ActiveXComponent;
- import com.jacob.com.ComThread;
- import com.jacob.com.Dispatch;
- import com.jacob.com.Variant;
- public class Java2Word1 {
- private boolean saveOnExit;
- /**
- * word文檔
- */
- private Dispatch doc = null;
- /**
- * word運行程序?qū)ο?br />
- */
- private ActiveXComponent word;
- /**
- * 所有word文檔
- */
- private Dispatch documents;
- /**
- * 構(gòu)造函數(shù)
- */
- public Java2Word1() {
- saveOnExit = false;
- word = new ActiveXComponent("Word.Application");
- word.setProperty("Visible", new Variant(false));
- documents = word.getProperty("Documents").toDispatch();
- }
- /**
- * 設(shè)置參數(shù):退出時是否保存
- *
- * @param saveOnExit
- * true-退出時保存文件,false-退出時不保存文件
- */
- public void setSaveOnExit(boolean saveOnExit) {
- this.saveOnExit = saveOnExit;
- }
- /**
- * 得到參數(shù):退出時是否保存
- *
- * @return boolean true-退出時保存文件,false-退出時不保存文件
- */
- public boolean getSaveOnExit() {
- return saveOnExit;
- }
- /**
- * 打開文件
- *
- * @param inputDoc
- * 要打開的文件,全路徑
- * @return Dispatch 打開的文件
- */
- public Dispatch open(String inputDoc) {
- return Dispatch.call(documents, "Open", inputDoc).toDispatch();
- }
- /**
- * 選定內(nèi)容
- *
- * @return Dispatch 選定的范圍或插入點
- */
- public Dispatch select() {
- return word.getProperty("Selection").toDispatch();
- }
- /**
- * 把選定內(nèi)容或插入點向上移動
- *
- * @param selection
- * 要移動的內(nèi)容
- * @param count
- * 移動的距離
- */
- public void moveUp(Dispatch selection, int count) {
- for (int i = 0; i < count; i++)
- Dispatch.call(selection, "MoveUp");
- }
- /**
- * 把選定內(nèi)容或插入點向下移動
- *
- * @param selection
- * 要移動的內(nèi)容
- * @param count
- * 移動的距離
- */
- public void moveDown(Dispatch selection, int count) {
- for (int i = 0; i < count; i++)
- Dispatch.call(selection, "MoveDown");
- }
- /**
- * 把選定內(nèi)容或插入點向左移動
- *
- * @param selection
- * 要移動的內(nèi)容
- * @param count
- * 移動的距離
- */
- public void moveLeft(Dispatch selection, int count) {
- for (int i = 0; i < count; i++)
- Dispatch.call(selection, "MoveLeft");
- }
- /**
- * 把選定內(nèi)容或插入點向右移動
- *
- * @param selection
- * 要移動的內(nèi)容
- * @param count
- * 移動的距離
- */
- public void moveRight(Dispatch selection, int count) {
- for (int i = 0; i < count; i++)
- Dispatch.call(selection, "MoveRight");
- }
- /**
- * 把插入點移動到文件首位置
- *
- * @param selection
- * 插入點
- */
- public void moveStart(Dispatch selection) {
- Dispatch.call(selection, "HomeKey", new Variant(6));
- }
- /**
- * 從選定內(nèi)容或插入點開始查找文本
- *
- * @param selection
- * 選定內(nèi)容
- * @param toFindText
- * 要查找的文本
- * @return boolean true-查找到并選中該文本,false-未查找到文本
- */
- public boolean find(Dispatch selection, String toFindText) {
- // 從selection所在位置開始查詢
- Dispatch find = Dispatch.call(selection, "Find").toDispatch();
- // 設(shè)置要查找的內(nèi)容
- Dispatch.put(find, "Text", toFindText);
- // 向前查找
- Dispatch.put(find, "Forward", "True");
- // 設(shè)置格式
- Dispatch.put(find, "Format", "True");
- // 大小寫匹配
- Dispatch.put(find, "MatchCase", "True");
- // 全字匹配
- Dispatch.put(find, "MatchWholeWord", "True");
- // 查找并選中
- return Dispatch.call(find, "Execute").getBoolean();
- }
- /**
- * 把選定內(nèi)容替換為設(shè)定文本
- *
- * @param selection
- * 選定內(nèi)容
- * @param newText
- * 替換為文本
- */
- public void replace(Dispatch selection, String newText) {
- // 設(shè)置替換文本
- Dispatch.put(selection, "Text", newText);
- }
- /**
- * 全局替換
- *
- * @param selection
- * 選定內(nèi)容或起始插入點
- * @param oldText
- * 要替換的文本
- * @param newText
- * 替換為文本
- */
- public void replaceAll(Dispatch selection, String oldText, Object replaceObj) {
- // 移動到文件開頭
- moveStart(selection);
- if (oldText.startsWith("table") || replaceObj instanceof List) {
- replaceTable(selection, oldText, (List) replaceObj);
- } else {
- String newText = (String) replaceObj;
- if (oldText.indexOf("image") != -1
- || 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
- * 圖片的插入點
- * @param imagePath
- * 圖片文件(全路徑)
- */
- public void replaceImage(Dispatch selection, String imagePath) {
- Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
- "AddPicture", imagePath);
- }
- /**
- * 替換表格
- *
- * @param selection
- * 插入點
- * @param tableName
- * 表格名稱,形如table$1@1、table$2@1...table$R@N,R代表從表格中的第N行開始填充,
- * N代表word文件中的第N張表
- * @param fields
- * 表格中要替換的字段與數(shù)據(jù)的對應(yīng)表
- */
- public void replaceTable(Dispatch selection, String tableName, List 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++) {
- // 某一行數(shù)據(jù)
- String[] datas = (String[]) dataList.get(i);
- // 在表格中添加一行
- if (Dispatch.get(rows, "Count").getInt() < fromRow + i - 1)
- Dispatch.call(rows, "Add");
- // 填充該行的相關(guān)列
- 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");
- // 設(shè)置格式
- Dispatch font = Dispatch.get(selection, "Font").toDispatch();
- Dispatch.put(font, "Bold", "0");
- Dispatch.put(font, "Italic", "0");
- // 輸入數(shù)據(jù)
- Dispatch.put(selection, "Text", datas[j]);
- }
- }
- }
- /**
- * 保存文件
- *
- * @param outputPath
- * 輸出文件(包含路徑)
- */
- public void save(String outputPath) {
- // Dispatch.call((Dispatch) Dispatch.call(word, "WordBasic").getDispatch(),
- // "FileSaveAs", outputPath,new Variant(51));
- Dispatch.invoke(doc, "SaveAs", Dispatch.Method,
- new Object[] { outputPath }, new int[1]);
- }
- /**
- * 關(guān)閉文件
- *
- * @param document
- * 要關(guān)閉的文件
- */
- public void close(Dispatch doc) {
- Dispatch.call(doc, "Close", new Variant(saveOnExit));
- }
- /**
- * 退出程序
- */
- public void quit() {
- word.invoke("Quit", new Variant[0]);
- ComThread.Release();
- }
- /**
- * 根據(jù)模板、數(shù)據(jù)生成word文件
- *
- * @param inputPath
- * 模板文件(包含路徑)
- * @param outPath
- * 輸出文件(包含路徑)
- * @param data
- * 數(shù)據(jù)包(包含要填充的字段、對應(yīng)的數(shù)據(jù))
- */
- public void toWord(String inputPath, String outPath, HashMap data) {
- String oldText;
- Object newValue;
- try {
- 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) {
- //debug.println("toword[Java2Word]------------操作word文件失。"+e.getMessage(),true);
- e.printStackTrace();
- }
- finally {
- if (doc != null)
- close(doc);
- }
- }
- public static void main(String[] args) {
-
- Java2Word1 j2w=new Java2Word1();
- String inputPath="C:\\Documents and Settings\\Administrator\\桌面\\報表\\提案模板.doc";
- String time = new SimpleDateFormat("yyyyMM-ddHHmmssSSS").format(new Date());
- String outPath="C:\\"+time+".doc";
- System.out.println(outPath);
- HashMap<String, String> data=new HashMap<String, String>();
- String main="社會發(fā)展.衛(wèi)生.醫(yī)療";
- String settime="2013.12.17";
- String number="0004";
- String title="關(guān)于進一步完善社區(qū)衛(wèi)生服務(wù)中心補充建立和配套醫(yī)療設(shè)施的提案";
- String zhuban="市衛(wèi)生局";
- String huiban="市人力社保局";
- String content="問題:" +
- "“看病貴、看病難”一直以來都是當今百姓最希望解決的問題。很多人都有過這樣的經(jīng)歷:為了掛到大醫(yī)院的專家號,早上天沒亮就匆忙趕到醫(yī)院開始排隊等號……在大醫(yī)院人滿為患時,社區(qū)醫(yī)院卻“門可羅雀”。于是有了大醫(yī)院里“病人等醫(yī)生”,社區(qū)醫(yī)院里“醫(yī)生等病人”的反差。無論大病小患均到大醫(yī)院就診,已經(jīng)成為百姓看病就醫(yī)的習慣,“過度診斷”、“小病大治”也就應(yīng)運而生,醫(yī)患矛盾頻發(fā)。" +
- "中國的社區(qū)衛(wèi)生服務(wù)是由以全科醫(yī)生為核心的衛(wèi)生服務(wù)團隊提供的服務(wù),相當于全科醫(yī)療服務(wù),包括以個人的健康為中心的服務(wù)、以家庭為單位的服務(wù)、以社區(qū)為范圍的服務(wù)和社會服務(wù)等內(nèi)容。社區(qū)醫(yī)院就是為百姓提供這種醫(yī)療服務(wù)的基層醫(yī)院。" +
- "在許多國家,社區(qū)醫(yī)院都是就醫(yī)首選,“小病在社區(qū),大病到醫(yī)院;手術(shù)在醫(yī)院,護理在社區(qū)”已成醫(yī)療慣例。在英美等發(fā)達國家,基層衛(wèi)生機構(gòu)的就診率達80%以上,不到20%的患者需轉(zhuǎn)診到中心醫(yī)院或?qū)?漆t(yī)院。在英國,平均每2000人就擁有一個社區(qū)全科醫(yī)生。相比之下,我國的社區(qū)醫(yī)療就相形見絀了。調(diào)查顯示,僅有22.5%的人愿意去社區(qū)醫(yī)院就診;而衛(wèi)生部門的資料卻表明,本來三級醫(yī)院65%的門診病人和77%的住院病人均可分流到社區(qū)衛(wèi)生機構(gòu)。究其原因,一方面是廣大百姓對社區(qū)醫(yī)院缺乏了解,另一方面,部分到社區(qū)醫(yī)院就診的患者反映:社區(qū)醫(yī)院設(shè)備不足、就醫(yī)條件差、人員資質(zhì)水平有限、全科醫(yī)生較少等諸多因素。" +
- "按照國家對社區(qū)衛(wèi)生服務(wù)中心規(guī)格的設(shè)定和服務(wù)任務(wù)要求按照1萬名居民配備2-3名全科醫(yī)生。公共衛(wèi)生六位一體任務(wù),即是指預防、醫(yī)療、保健、健康教育、康復和計劃生育技術(shù)指導。目前社區(qū)衛(wèi)生服務(wù)中心基本以區(qū)域建設(shè)完成,但就合理配套還有一定的差距。如大區(qū)域人口只有一個衛(wèi)生服務(wù)中心,下屬衛(wèi)生站也不夠,不能達到15分鐘內(nèi)步行到達。而且給當?shù)厣鐓^(qū)衛(wèi)生服務(wù)中心增加過多的醫(yī)療任務(wù)及公共衛(wèi)生工作,造成社區(qū)衛(wèi)生服務(wù)中心像個“筐”,什么都往里裝,使得醫(yī)務(wù)人員應(yīng)接不暇,既完成不好績效考核指標,又不能與正常的社區(qū)衛(wèi)生服務(wù)中心同步爭取“優(yōu)秀”評比工作,大大挫傷了不是同一起跑線但是同一水平要求的一級社區(qū)衛(wèi)生服務(wù)中心的積極性。\r\n" +
- "分析:" +
- "目前,全國95%的地級以上城市、86%的市轄區(qū)和一批縣級市開展了城市社區(qū)衛(wèi)生服務(wù),全國已設(shè)置社區(qū)衛(wèi)生服務(wù)中心3400多個社區(qū)衛(wèi)生服務(wù)站近12000個,創(chuàng)建了108個全國社區(qū)衛(wèi)生服務(wù)示范區(qū)。" +
- "一個街道3萬至10萬常住居民規(guī)模設(shè)置一個社區(qū)衛(wèi)生服務(wù)中心,居民從家中步行不超過15分鐘能到達一個社區(qū)衛(wèi)生服務(wù)機構(gòu)。2000年我國60歲以上的老年人就已達到1.3億,占我國總?cè)丝诘?0%,標明我國已經(jīng)進入了老齡化社會。2020年預計我國60歲以上的老年人口將達到2.45億,占總?cè)丝诘?6%以上。2020年基本實現(xiàn)城鄉(xiāng)每萬名居民有2-3名合格的全科醫(yī)生,全國至少需要27萬到41萬名高素質(zhì)的全科醫(yī)生。而目前的全科醫(yī)生和助理醫(yī)生只有7.8萬人,缺口近30萬名。" +
- "李克強總理說過:醫(yī)改事關(guān)民生福祉,也是民心所向,堅持保基本、強基層、建機制,向深化改革要紅利,把基本醫(yī)療衛(wèi)生制度作為公共產(chǎn)品向全民提供。而基層醫(yī)療衛(wèi)生機構(gòu)是做好預防保健工作的“前哨”,深化醫(yī)改要堅持預防為主、防治結(jié)合的方針,促進醫(yī)療衛(wèi)生服務(wù)的關(guān)口要前移,重心下移。" +
- "而就目前社區(qū)衛(wèi)生服務(wù)中心機構(gòu)而言,還存在諸多問題。如醫(yī)療人力資源匱乏、基礎(chǔ)差、流失多等、是目前社區(qū)衛(wèi)生服務(wù)面臨的問題。要開展和完成真正意義上的“六位一體”工作尚有一定難度。\r\n" +
- "建議:" +
- "為了能更好的實現(xiàn)六位一體的服務(wù)模式,政府應(yīng)繼續(xù)加大投入與補償政策,應(yīng)進一步完善社區(qū)衛(wèi)生服務(wù)機構(gòu)結(jié)構(gòu)建設(shè),以便繼續(xù)加強社區(qū)衛(wèi)生服務(wù)“六位一體”功能:" +
- "1、規(guī)范、嚴格按照國家規(guī)定的以區(qū)域人口建立、建設(shè)健全社區(qū)衛(wèi)生服務(wù)中心、衛(wèi)生站。" +
- "2、統(tǒng)一完善各社區(qū)衛(wèi)生服務(wù)中心配套設(shè)施、醫(yī)療科室建設(shè)。讓老百姓享受規(guī)范的社區(qū)衛(wèi)生服務(wù)中心服務(wù)要求。" +
- "3、規(guī)范、完善健康檔案及信息網(wǎng)絡(luò)。" +
- "4、績效考核標準以管理人群為界定,讓醫(yī)務(wù)人員更實際、更好地完成各項醫(yī)療、公共衛(wèi)生及醫(yī)療管理任務(wù)。" +
- "5、加大對社區(qū)衛(wèi)生服務(wù)中心的財力支持調(diào)整醫(yī)療保險相關(guān)政策:對社區(qū)衛(wèi)生服務(wù)中心加大傾斜,完善配套政策;鼓勵大醫(yī)院辦社區(qū)衛(wèi)生服務(wù)中心,形成醫(yī)療集團牽頭人,保障社區(qū)衛(wèi)生服務(wù)醫(yī)療水平;鼓勵民營資本進入社區(qū)衛(wèi)生服務(wù)領(lǐng)域,共享醫(yī)療資源,進一步完善衛(wèi)生機構(gòu)內(nèi)部運行機制:加強全科醫(yī)師人才培養(yǎng),推進社區(qū)衛(wèi)生服務(wù)整體水平的提高,并廣納人才,以提高社區(qū)衛(wèi)生服務(wù)中心的整體素質(zhì)。" +
- "";
- String person="王以新(189)";
- String job="首都醫(yī)科大學附屬北京安貞醫(yī)院教育處副處長、全科醫(yī)療科主任";
- String address="北京市朝陽區(qū)安貞里首都醫(yī)科大學附屬北京安貞醫(yī)院教育處";
- String cell="13910157217";
- String tel="64456417 64456417(Fax)";
- String post="100029";
- String email="Wangyixin6417@sina.com";
-
- data.put("“主題詞”", main);
- data.put("“日期”", settime);
- data.put("第“0”號", "第"+number+"號");
- data.put("“主辦”", zhuban);
- data.put("“會辦”", huiban);
- data.put("“題目”", title);
- data.put("“內(nèi)容”", content);
- data.put("“提案人”", person);
- data.put("“職務(wù)”", job);
- data.put("“聯(lián)系地址”", address);
- data.put("“聯(lián)系手機”", cell);
- data.put("“聯(lián)系電話”", tel);
- data.put("“郵政編碼”", post);
- data.put("“郵箱”", email);
- Dispatch doc=j2w.open(inputPath);
- for(int i=0;i<3;i++)
- j2w.toWord(inputPath, outPath, data);
- }
- }
復制代碼 |
-
-
提案模板.rar
2014-08-31 17:47 上傳
點擊文件名下載附件
6.91 KB, 下載次數(shù): 48
|