使用Office Open XML將XML數據寫入Word2007文檔表格之一

 

那天,在CSDN論壇上看見有人問:“現在有一個XML文件,該文件裏面有十萬行的數據,每行數據有十列,現在要將這種十萬行數據包存到word中去,不是簡單的將XML中的數據直接存到word中去,而是要在word中建立一個表格,該表格有十萬行,每行有十列,整個過程最好要控制在三秒之內,可以延長到五秒內。

近日,俺在研究那個Office Open XML,正好拿來試試刀。根據要求,俺應該做的步驟:

1.       讀取XML文件;

2.       變成Word表格;

3.       寫入Word文檔;

4.       控制時間,優化編程。

1.準備

十萬行,每行十列的數據非常大,俺想測試一下,如果讀入內存,不做任何處理然後寫成Word文檔,需要多長時間,俺的配置是:

硬件:Intel E72004G/1033RAMS-ATA硬盤

軟件:MS Windows Server 2003 En R2 X64Office 2007VS 2008 Team OOXML SDK 2Bata

假設測試XML文件數據格式如下:

 

 

 

 

 

<DataSet>標籤內有10萬個<S_Dialog>元素。每個<S_Dialog>元素有10個數據。

編寫程序,將上述數據讀入內存,然後寫成Word2007文檔,測試所用時間見下:

 

 

 

 

 

3.046875

 

進一步,精簡數據,如圖:

 

 

 

 

 

降低時間表示規格,減少數據;

 

 

 

 

 

多次運行結果:

 

 

 

 

顯然,執行時間明顯減少。

 

測試XML文件名稱:X_Dialog.xml

輸出Word2007文件名稱:word01.docx

 

測試代碼:

     static void Main(string[] args)

        {

            CreateNewWordDocument(@"c:/word01.docx");

        }

 

        // 創建一個word文檔包

        public static void CreateNewWordDocument(string document)

        {

            using (WordprocessingDocument wordDoc = WordprocessingDocument.Create(document, WordprocessingDocumentType.Document))

            {

                // 設置包內容爲word文檔格式並打開.

                MainDocumentPart mainPart = wordDoc.AddMainDocumentPart();

 

                SetMainDocumentContent(mainPart);

            }

        }

 

        //設置主文檔內容.

        public static void SetMainDocumentContent(MainDocumentPart part)

        {

            string docXml = "";

            System.DateTime ks=System.DateTime.Now;

            Console.WriteLine("開始時間是:{0:o}", ks);

 

            FileStream fs = File.Open("X_Dialog.xml", FileMode.Open);

            XmlDocument doc = new XmlDocument();

            doc.Load(fs);

            docXml = doc.InnerXml.ToString();

 

            using (Stream stream = part.GetStream())

            {

                byte[] buf = (new UTF8Encoding()).GetBytes(docXml);

                stream.Write(buf, 0, buf.Length);

            }

            System.DateTime js = System.DateTime.Now;

            Console.WriteLine("結束時間是:{0:o}", js);

            Console.Write("需要時間:{0}",js-ks);

   }

 

 

 

(待續)

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章