亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 4531 | 回復: 0
打印 上一主題 下一主題

jacob循環(huán)替換模板文本的問題 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-08-31 17:47 |只看該作者 |倒序瀏覽
RT,用以下程序按模板生成新的word,執(zhí)行是可行的,但是現(xiàn)在需要循環(huán)替換模板文件,生成在同一個word上,則不行,只能執(zhí)行一次,為何?應(yīng)該如何修改?求高手指點。
模板已傳到附件中
  1. package com.word;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.Iterator;
  7. import java.util.List;
  8. import java.util.HashMap;

  9. import com.jacob.activeX.ActiveXComponent;
  10. import com.jacob.com.ComThread;
  11. import com.jacob.com.Dispatch;
  12. import com.jacob.com.Variant;

  13. public class Java2Word1 {
  14.         private boolean saveOnExit;
  15.         /**
  16.          * word文檔
  17.          */
  18.         private Dispatch doc = null;
  19.         /**
  20.          * word運行程序?qū)ο?br />
  21.          */
  22.         private ActiveXComponent word;
  23.         /**
  24.          * 所有word文檔
  25.          */
  26.         private Dispatch documents;

  27.         /**
  28.          * 構(gòu)造函數(shù)
  29.          */
  30.         public Java2Word1() {
  31.                 saveOnExit = false;
  32.                 word = new ActiveXComponent("Word.Application");
  33.                 word.setProperty("Visible", new Variant(false));
  34.                 documents = word.getProperty("Documents").toDispatch();
  35.         }

  36.         /**
  37.          * 設(shè)置參數(shù):退出時是否保存
  38.          *
  39.          * @param saveOnExit
  40.          *            true-退出時保存文件,false-退出時不保存文件
  41.          */
  42.         public void setSaveOnExit(boolean saveOnExit) {
  43.                 this.saveOnExit = saveOnExit;
  44.         }

  45.         /**
  46.          * 得到參數(shù):退出時是否保存
  47.          *
  48.          * @return boolean true-退出時保存文件,false-退出時不保存文件
  49.          */
  50.         public boolean getSaveOnExit() {
  51.                 return saveOnExit;
  52.         }

  53.         /**
  54.          * 打開文件
  55.          *
  56.          * @param inputDoc
  57.          *            要打開的文件,全路徑
  58.          * @return Dispatch 打開的文件
  59.          */
  60.         public Dispatch open(String inputDoc) {
  61.                 return Dispatch.call(documents, "Open", inputDoc).toDispatch();
  62.         }

  63.         /**
  64.          * 選定內(nèi)容
  65.          *
  66.          * @return Dispatch 選定的范圍或插入點
  67.          */
  68.         public Dispatch select() {
  69.                 return word.getProperty("Selection").toDispatch();
  70.         }

  71.         /**
  72.          * 把選定內(nèi)容或插入點向上移動
  73.          *
  74.          * @param selection
  75.          *            要移動的內(nèi)容
  76.          * @param count
  77.          *            移動的距離
  78.          */
  79.         public void moveUp(Dispatch selection, int count) {
  80.                 for (int i = 0; i < count; i++)
  81.                         Dispatch.call(selection, "MoveUp");
  82.         }

  83.         /**
  84.          * 把選定內(nèi)容或插入點向下移動
  85.          *
  86.          * @param selection
  87.          *            要移動的內(nèi)容
  88.          * @param count
  89.          *            移動的距離
  90.          */
  91.         public void moveDown(Dispatch selection, int count) {
  92.                 for (int i = 0; i < count; i++)
  93.                         Dispatch.call(selection, "MoveDown");
  94.         }

  95.         /**
  96.          * 把選定內(nèi)容或插入點向左移動
  97.          *
  98.          * @param selection
  99.          *            要移動的內(nèi)容
  100.          * @param count
  101.          *            移動的距離
  102.          */
  103.         public void moveLeft(Dispatch selection, int count) {
  104.                 for (int i = 0; i < count; i++)
  105.                         Dispatch.call(selection, "MoveLeft");
  106.         }

  107.         /**
  108.          * 把選定內(nèi)容或插入點向右移動
  109.          *
  110.          * @param selection
  111.          *            要移動的內(nèi)容
  112.          * @param count
  113.          *            移動的距離
  114.          */
  115.         public void moveRight(Dispatch selection, int count) {
  116.                 for (int i = 0; i < count; i++)
  117.                         Dispatch.call(selection, "MoveRight");
  118.         }

  119.         /**
  120.          * 把插入點移動到文件首位置
  121.          *
  122.          * @param selection
  123.          *            插入點
  124.          */
  125.         public void moveStart(Dispatch selection) {
  126.                 Dispatch.call(selection, "HomeKey", new Variant(6));
  127.         }

  128.         /**
  129.          * 從選定內(nèi)容或插入點開始查找文本
  130.          *
  131.          * @param selection
  132.          *            選定內(nèi)容
  133.          * @param toFindText
  134.          *            要查找的文本
  135.          * @return boolean true-查找到并選中該文本,false-未查找到文本
  136.          */
  137.         public boolean find(Dispatch selection, String toFindText) {
  138.                 // 從selection所在位置開始查詢
  139.                 Dispatch find = Dispatch.call(selection, "Find").toDispatch();
  140.                 // 設(shè)置要查找的內(nèi)容
  141.                 Dispatch.put(find, "Text", toFindText);
  142.                 // 向前查找
  143.                 Dispatch.put(find, "Forward", "True");
  144.                 // 設(shè)置格式
  145.                 Dispatch.put(find, "Format", "True");
  146.                 // 大小寫匹配
  147.                 Dispatch.put(find, "MatchCase", "True");
  148.                 // 全字匹配
  149.                 Dispatch.put(find, "MatchWholeWord", "True");
  150.                 // 查找并選中
  151.                 return Dispatch.call(find, "Execute").getBoolean();
  152.         }

  153.         /**
  154.          * 把選定內(nèi)容替換為設(shè)定文本
  155.          *
  156.          * @param selection
  157.          *            選定內(nèi)容
  158.          * @param newText
  159.          *            替換為文本
  160.          */
  161.         public void replace(Dispatch selection, String newText) {
  162.                 // 設(shè)置替換文本
  163.                 Dispatch.put(selection, "Text", newText);
  164.         }

  165.         /**
  166.          * 全局替換
  167.          *
  168.          * @param selection
  169.          *            選定內(nèi)容或起始插入點
  170.          * @param oldText
  171.          *            要替換的文本
  172.          * @param newText
  173.          *            替換為文本
  174.          */
  175.         public void replaceAll(Dispatch selection, String oldText, Object replaceObj) {
  176.                 // 移動到文件開頭
  177.                 moveStart(selection);
  178.                 if (oldText.startsWith("table") || replaceObj instanceof List) {
  179.                         replaceTable(selection, oldText, (List) replaceObj);
  180.                 } else {
  181.                         String newText = (String) replaceObj;
  182.                         if (oldText.indexOf("image") != -1
  183.                                         || newText.lastIndexOf(".bmp") != -1
  184.                                         || newText.lastIndexOf(".jpg") != -1
  185.                                         || newText.lastIndexOf(".gif") != -1)
  186.                                 while (find(selection, oldText)) {
  187.                                         replaceImage(selection, newText);
  188.                                         Dispatch.call(selection, "MoveRight");
  189.                                 }
  190.                         else
  191.                                 while (find(selection, oldText)) {
  192.                                         replace(selection, newText);
  193.                                         Dispatch.call(selection, "MoveRight");
  194.                                 }
  195.                 }
  196.         }

  197.         /**
  198.          * 替換圖片
  199.          *
  200.          * @param selection
  201.          *            圖片的插入點
  202.          * @param imagePath
  203.          *            圖片文件(全路徑)
  204.          */
  205.         public void replaceImage(Dispatch selection, String imagePath) {
  206.                 Dispatch.call(Dispatch.get(selection, "InLineShapes").toDispatch(),
  207.                                 "AddPicture", imagePath);
  208.         }

  209.         /**
  210.          * 替換表格
  211.          *
  212.          * @param selection
  213.          *            插入點
  214.          * @param tableName
  215.          *            表格名稱,形如table$1@1、table$2@1...table$R@N,R代表從表格中的第N行開始填充,
  216.          *            N代表word文件中的第N張表
  217.          * @param fields
  218.          *            表格中要替換的字段與數(shù)據(jù)的對應(yīng)表
  219.          */
  220.         public void replaceTable(Dispatch selection, String tableName, List dataList) {
  221.                 if (dataList.size() <= 1) {
  222.                         System.out.println("Empty table!");
  223.                         return;
  224.                 }
  225.                 // 要填充的列
  226.                 String[] cols = (String[]) dataList.get(0);
  227.                 // 表格序號
  228.                 String tbIndex = tableName.substring(tableName.lastIndexOf("@") + 1);
  229.                 // 從第幾行開始填充
  230.                 int fromRow = Integer.parseInt(tableName.substring(
  231.                                 tableName.lastIndexOf("$") + 1, tableName.lastIndexOf("@")));
  232.                 // 所有表格
  233.                 Dispatch tables = Dispatch.get(doc, "Tables").toDispatch();
  234.                 // 要填充的表格
  235.                 Dispatch table = Dispatch.call(tables, "Item", new Variant(tbIndex))
  236.                                 .toDispatch();
  237.                 // 表格的所有行
  238.                 Dispatch rows = Dispatch.get(table, "Rows").toDispatch();
  239.                 // 填充表格
  240.                 for (int i = 1; i < dataList.size(); i++) {
  241.                         // 某一行數(shù)據(jù)
  242.                         String[] datas = (String[]) dataList.get(i);
  243.                         // 在表格中添加一行
  244.                         if (Dispatch.get(rows, "Count").getInt() < fromRow + i - 1)
  245.                                 Dispatch.call(rows, "Add");
  246.                         // 填充該行的相關(guān)列
  247.                         for (int j = 0; j < datas.length; j++) {
  248.                                 // 得到單元格
  249.                                 Dispatch cell = Dispatch.call(table, "Cell",
  250.                                                 Integer.toString(fromRow + i - 1), cols[j])
  251.                                                 .toDispatch();
  252.                                 // 選中單元格
  253.                                 Dispatch.call(cell, "Select");
  254.                                 // 設(shè)置格式
  255.                                 Dispatch font = Dispatch.get(selection, "Font").toDispatch();
  256.                                 Dispatch.put(font, "Bold", "0");
  257.                                 Dispatch.put(font, "Italic", "0");
  258.                                 // 輸入數(shù)據(jù)
  259.                                 Dispatch.put(selection, "Text", datas[j]);
  260.                         }
  261.                 }
  262.         }

  263.         /**
  264.          * 保存文件
  265.          *
  266.          * @param outputPath
  267.          *            輸出文件(包含路徑)
  268.          */
  269.         public void save(String outputPath) {
  270. //                Dispatch.call((Dispatch) Dispatch.call(word, "WordBasic").getDispatch(),
  271. //                            "FileSaveAs", outputPath,new Variant(51));
  272.                 Dispatch.invoke(doc, "SaveAs", Dispatch.Method,
  273.                                 new Object[] { outputPath }, new int[1]);

  274.         }

  275.         /**
  276.          * 關(guān)閉文件
  277.          *
  278.          * @param document
  279.          *            要關(guān)閉的文件
  280.          */
  281.         public void close(Dispatch doc) {
  282.                 Dispatch.call(doc, "Close", new Variant(saveOnExit));
  283.         }

  284.         /**
  285.          * 退出程序
  286.          */
  287.         public void quit() {
  288.                 word.invoke("Quit", new Variant[0]);
  289.                 ComThread.Release();
  290.         }

  291.         /**
  292.          * 根據(jù)模板、數(shù)據(jù)生成word文件
  293.          *
  294.          * @param inputPath
  295.          *            模板文件(包含路徑)
  296.          * @param outPath
  297.          *            輸出文件(包含路徑)
  298.          * @param data
  299.          *            數(shù)據(jù)包(包含要填充的字段、對應(yīng)的數(shù)據(jù))
  300.          */
  301.         public void toWord(String inputPath, String outPath, HashMap data) {
  302.                 String oldText;
  303.                 Object newValue;
  304.                 try {
  305.                         doc = open(inputPath);
  306.                         Dispatch selection = select();
  307.                         Iterator keys = data.keySet().iterator();
  308.                         while (keys.hasNext()) {
  309.                                 oldText = (String) keys.next();
  310.                                 newValue = data.get(oldText);
  311.                                 replaceAll(selection, oldText, newValue);
  312.                         }
  313.                         save(outPath);
  314.                 } catch (Exception e) {
  315.                          //debug.println("toword[Java2Word]------------操作word文件失。"+e.getMessage(),true);
  316.                         e.printStackTrace();
  317.                 }
  318.                 finally {
  319.                         if (doc != null)
  320.                                 close(doc);
  321.                 }
  322.         }
  323.         public static void main(String[] args) {
  324.                
  325.                 Java2Word1 j2w=new Java2Word1();
  326.                 String inputPath="C:\\Documents and Settings\\Administrator\\桌面\\報表\\提案模板.doc";
  327.                 String time = new SimpleDateFormat("yyyyMM-ddHHmmssSSS").format(new Date());
  328.                 String outPath="C:\\"+time+".doc";
  329.                 System.out.println(outPath);
  330.                 HashMap<String, String> data=new HashMap<String, String>();
  331.                 String main="社會發(fā)展.衛(wèi)生.醫(yī)療";
  332.                 String settime="2013.12.17";
  333.                 String number="0004";
  334.                 String title="關(guān)于進一步完善社區(qū)衛(wèi)生服務(wù)中心補充建立和配套醫(yī)療設(shè)施的提案";
  335.                 String zhuban="市衛(wèi)生局";
  336.                 String huiban="市人力社保局";
  337.                 String content="問題:" +
  338.                                 "“看病貴、看病難”一直以來都是當今百姓最希望解決的問題。很多人都有過這樣的經(jīng)歷:為了掛到大醫(yī)院的專家號,早上天沒亮就匆忙趕到醫(yī)院開始排隊等號……在大醫(yī)院人滿為患時,社區(qū)醫(yī)院卻“門可羅雀”。于是有了大醫(yī)院里“病人等醫(yī)生”,社區(qū)醫(yī)院里“醫(yī)生等病人”的反差。無論大病小患均到大醫(yī)院就診,已經(jīng)成為百姓看病就醫(yī)的習慣,“過度診斷”、“小病大治”也就應(yīng)運而生,醫(yī)患矛盾頻發(fā)。" +
  339.                                 "中國的社區(qū)衛(wèi)生服務(wù)是由以全科醫(yī)生為核心的衛(wèi)生服務(wù)團隊提供的服務(wù),相當于全科醫(yī)療服務(wù),包括以個人的健康為中心的服務(wù)、以家庭為單位的服務(wù)、以社區(qū)為范圍的服務(wù)和社會服務(wù)等內(nèi)容。社區(qū)醫(yī)院就是為百姓提供這種醫(yī)療服務(wù)的基層醫(yī)院。" +
  340.                                 "在許多國家,社區(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ī)生較少等諸多因素。" +
  341.                                 "按照國家對社區(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" +
  342.                                 "分析:" +
  343.                                 "目前,全國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ū)。" +
  344.                                 "一個街道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萬名。" +
  345.                                 "李克強總理說過:醫(yī)改事關(guān)民生福祉,也是民心所向,堅持保基本、強基層、建機制,向深化改革要紅利,把基本醫(yī)療衛(wèi)生制度作為公共產(chǎn)品向全民提供。而基層醫(yī)療衛(wèi)生機構(gòu)是做好預防保健工作的“前哨”,深化醫(yī)改要堅持預防為主、防治結(jié)合的方針,促進醫(yī)療衛(wèi)生服務(wù)的關(guān)口要前移,重心下移。" +
  346.                                 "而就目前社區(qū)衛(wèi)生服務(wù)中心機構(gòu)而言,還存在諸多問題。如醫(yī)療人力資源匱乏、基礎(chǔ)差、流失多等、是目前社區(qū)衛(wèi)生服務(wù)面臨的問題。要開展和完成真正意義上的“六位一體”工作尚有一定難度。\r\n" +
  347.                                 "建議:" +
  348.                                 "為了能更好的實現(xiàn)六位一體的服務(wù)模式,政府應(yīng)繼續(xù)加大投入與補償政策,應(yīng)進一步完善社區(qū)衛(wèi)生服務(wù)機構(gòu)結(jié)構(gòu)建設(shè),以便繼續(xù)加強社區(qū)衛(wèi)生服務(wù)“六位一體”功能:" +
  349.                                 "1、規(guī)范、嚴格按照國家規(guī)定的以區(qū)域人口建立、建設(shè)健全社區(qū)衛(wèi)生服務(wù)中心、衛(wèi)生站。" +
  350.                                 "2、統(tǒng)一完善各社區(qū)衛(wèi)生服務(wù)中心配套設(shè)施、醫(yī)療科室建設(shè)。讓老百姓享受規(guī)范的社區(qū)衛(wèi)生服務(wù)中心服務(wù)要求。" +
  351.                                 "3、規(guī)范、完善健康檔案及信息網(wǎng)絡(luò)。" +
  352.                                 "4、績效考核標準以管理人群為界定,讓醫(yī)務(wù)人員更實際、更好地完成各項醫(yī)療、公共衛(wèi)生及醫(yī)療管理任務(wù)。" +
  353.                                 "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ì)。" +
  354.                                 "";
  355.                 String person="王以新(189)";
  356.                 String job="首都醫(yī)科大學附屬北京安貞醫(yī)院教育處副處長、全科醫(yī)療科主任";
  357.                 String address="北京市朝陽區(qū)安貞里首都醫(yī)科大學附屬北京安貞醫(yī)院教育處";
  358.                 String cell="13910157217";
  359.                 String tel="64456417 64456417(Fax)";
  360.                 String post="100029";
  361.                 String email="Wangyixin6417@sina.com";
  362.                
  363.                         data.put("“主題詞”", main);
  364.                         data.put("“日期”", settime);
  365.                         data.put("第“0”號", "第"+number+"號");
  366.                         data.put("“主辦”", zhuban);
  367.                         data.put("“會辦”", huiban);
  368.                         data.put("“題目”", title);
  369.                         data.put("“內(nèi)容”", content);
  370.                         data.put("“提案人”", person);
  371.                         data.put("“職務(wù)”", job);
  372.                         data.put("“聯(lián)系地址”", address);
  373.                         data.put("“聯(lián)系手機”", cell);
  374.                         data.put("“聯(lián)系電話”", tel);
  375.                         data.put("“郵政編碼”", post);
  376.                         data.put("“郵箱”", email);
  377.                         Dispatch doc=j2w.open(inputPath);
  378.             for(int i=0;i<3;i++)       
  379.                   j2w.toWord(inputPath, outPath, data);

  380.         }
  381. }
復制代碼

提案模板.rar

6.91 KB, 下載次數(shù): 48

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP