文章分類

C# (27) ASP.NET (13) SQL (7) ORACLE (5) JAVA (2) SQLSERVER2008 (2) 大家都在問的事 (2) ACCESS (1) ANDRIOD (1) JQUERY (1) python (1) 雜談 (1)

關於我自己

我的相片
程式初心者 JAVA, ASP.NET, C# ,SQL

2012年3月16日 星期五

【C#】 存取WORD中文字區域的文字

要寫一個簡單的程式去WORD去SEARCH一些文字方塊中的特定字串並取代新字串,再印出來
簡單的範例如下..

記得先參考Microsoft Word 12.0 Object library或Microsoft Word 13.0 Object library
Microsoft Word 14.0 Object library(對映office版本)
 
 
using System.IO;
using System.Data.OleDb;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Collections;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;
using Microsoft.Office.Interop.Word;
using System.Threading;
/* 中略 */
 #region 取代WORD主程式
 #region 取代文字FUNCTION(被呼叫的FUN)
        public void exchange(string oldstring, string newstring, ref Word._Document oDoc,ref 
        Word._Application oWord) 
        {
            #region 文字區域
            string oldStr = oldstring;//被取代的文字
            string newStr = newstring;//要放入的文字
            object replaceAll = Word.WdReplace.wdReplaceAll;
            object missing = Type.Missing;

            oWord.Selection.Find.ClearFormatting();
            oWord.Selection.Find.Text = oldStr;

            oWord.Selection.Find.Replacement.ClearFormatting();
            oWord.Selection.Find.Replacement.Text = newStr;

            oWord.Selection.Find.Execute(
                ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref missing, ref missing, ref missing,
                ref replaceAll, ref missing, ref missing, ref missing, ref missing);
            #endregion

            #region 文本框
            StoryRanges sr = oDoc.StoryRanges;
            foreach (Range r in sr)
            {
                Range r1 = r;
                if (WdStoryType.wdTextFrameStory == r.StoryType)
                {
                    do
                    {
                        r1.Find.ClearFormatting();
                        r1.Find.Text = oldStr;

                        r1.Find.Replacement.ClearFormatting();
                        r1.Find.Replacement.Text = newStr;

                        r1.Find.Execute(
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref replaceAll, ref missing, ref missing, ref missing, ref missing);

                        r1 = r1.NextStoryRange;
                    } while (r1 != null);
                }
            }
            #endregion
        
        
        
        
        
        }
        #endregion

        //此為主程式
        public void change_wordDOC(System.Data.DataTable dt,int NUM,string filenameDoc,
        string ADDRESS)
        {
            copy_doc(filenameDoc);//此為將要取代的文件複製到另一個資料夾再處理,省略內容..

            string[] str_list = new string[] { "AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG",
            "HHH" };//比對WORD位置
            object oMissing = System.Reflection.Missing.Value;
            Word._Application oWord;
            Word._Document oDoc;
            oWord = new Word.Application();
            oWord.Visible = false;//背景處理不開啟word介面


            // 打開文件:
            string filename_root = System.Windows.Forms.Application.StartupPath + @"\DOC2\" 
            + filenameDoc;
            object fileName = System.Windows.Forms.Application.StartupPath + @"\DOC2\"
            + filenameDoc;

            oDoc = oWord.Documents.Open(ref fileName,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);


            for (int i = 0; i < NUM; i++)
            {
                exchange(str_list[i].ToString(), dt.Rows[0][i].ToString(), ref oDoc, ref oWord); 
               //呼叫取代字串的函數  exchange(要被取代的字串,要取代的字串,
               開啟Word._Document  ,開啟的Word._Application) 
 
            }
            exchange("ADDRESS", ADDRESS, ref oDoc, ref oWord);

            //oDoc.PrintPreview();//可以顯示word預覽列印
           

            oDoc.PrintOut(ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
            ref oMissing, ref oMissing, ref oMissing, ref oMissing);
            Thread.Sleep(3000);

             MessageBox.Show("列印完成");
            oDoc.Close(ref oMissing, ref oMissing, ref oMissing);//關閉文件
             oWord.Quit(ref oMissing, ref oMissing, ref oMissing);//關閉WORD
            
        }

        #endregion

2012年3月15日 星期四

【雜談】工程師寫程式時的基本SENSE

1.向USER確認需求

    在設計架構與流程時, 和使用者的需求一定是必要的,此時要充份的溝通, 不要一味的聽從使用者, 有時候這個階段比較像是要教育使用者, 什麼是系統正確的流程與架構,如果你的專業知識不夠強大,可以請求PM的介入,雙方要有一定的共識才可以動手寫程式,否則往後就是個無止境的黑洞。

2.確認你系統撰寫工具

    程式語言百百種,選擇開發的程式語言, 資料庫與相關技術的使用, 這也是需要和USER協商的部份(後續維護), 並注意你的程式是否能滿足先前需求訪談的架構需求。

3.確認系統環境
 
   是WIN7, WINXP,SERVER ,32位元,64位元作業系統?
   相關檔案版本?*(EX.會存取OFFICE文件)
   避免你開發的程式有相容性問題

4.開始每天都建立備份檔案
  你不知道什麼時候你的系統會掛掉, 請定期備份,網路也很發達, 上傳到免費的網路空間, 或是公司有提供BACKUP SERVER都是很好的方法

5.開始撰寫文件
  很無聊又很重要的事情,如果你有閒瑕時間一定要寫份系統文件,程式文件,基本的程式中寫註解是一定的要的, 能解釋的越清楚越好, 往後交接,查BUG都事半功倍

2012年3月6日 星期二

【SQL】WHERE 1=1, 1=0

1.WHERE 1=1
小技巧,通常在程式中可以動態的處理SQL語句的方法,
SELECT * FROM DT WHERE 1=1 和 SELECT * FROM DT 其實是一樣的東西

範例
    String a="1";
    String b="2";
   String SQL_STR="SELECT * FROM DT WHERE 1=1";
   if(String.IsNullorEmpty(a))//條件1
   {
      SQL_STR+="AND a='a'";
   }
   if(String.IsNullorEmpty(b))//條件2
   {
      SQL_STR+="AND b='b'";
   }
   //如此就算條件1, 條件2不成立, SQL_STR丟回資料庫處理時也不會產生錯誤


2.WHERE 1=0
SELECT * FROM DT WHERE 1=0 意指只傳回SELECT結果的表格結構
範例
   Create table newT AS SELECT *FROM DT1 WHERE 1=0