C#使用Aspose.Words操作word文檔


最近接到個需求,由於客服這邊要導出大量有一定規則的word文件,里面的內容希望系統自動填充,例如

這里我使用Aspose.Words.dll這個類庫,

1.首先,我們需要創建模板文件,畢竟有規則的東西才好開發。在各個位置處添加書簽,如下:

2.核心方法如下,由於我這邊需求最多填充四個參數:中文品名、英文描述、HAWB、件數,所以下面方法就定義這幾個變量。其中,有些模板若不需要個別參數,直接傳空值就行。

 /// <summary>
        /// 非危保函(將指定路徑的模板Path_TempleteDoc輸出至Path_out路徑)
        /// </summary>
        /// <param name="Path_TempleteDoc">模板文件路徑,包含文件名</param>
        /// <param name="CNName">中文品名</param>
        /// <param name="ENName">英文描述</param>
        /// <param name="HAWB">HAWB</param>
        /// <param name="PCS">件數</param>
        /// <param name="Path_out">文件輸出路徑,包含文件名</param>
        private void HandleGuaranteeDoc(string Path_TempleteDoc,string CNName,string ENName,string HAWB,string PCS,string Path_out)
        {
            string tempFile = Path.GetFullPath(Path_TempleteDoc).ToString();      //獲取模板路徑,這個根據個人模板路徑而定。
            Document doc = new Document(tempFile);
            DocumentBuilder builder = new DocumentBuilder(doc);   //操作word
            Dictionary<string, string> dic = new Dictionary<string, string>();   //創建鍵值對   第一個string 為書簽名稱 第二個string為要填充的數據
            if (!string.IsNullOrEmpty(CNName))
            {
                dic.Add("CNName", CNName);
            }
            if (!string.IsNullOrEmpty(ENName))
            {
                dic.Add("ENName", ENName);
            }
            if (!string.IsNullOrEmpty(HAWB))
            {
                dic.Add("HAWB", HAWB);
            }
            if (!string.IsNullOrEmpty(PCS))
            {
                dic.Add("PCS", PCS);
            }
            foreach (var key in dic.Keys)   //循環鍵值對
            {
                builder.MoveToBookmark(key);  //將光標移入書簽的位置
                builder.Write(dic[key]);   //填充值
            }
            doc.Save(Path_out); //保存word
        }

另附上文件的復制和整個文件夾的復制

文件復制(路徑都准確到文件名):

 /// <summary>
        /// 大文件多次復制文件  true:復制成功   false:復制失敗
        /// </summary>
        /// <param name="soucrePath">原始文件路徑包含文件名</param>
        /// <param name="targetPath">復制目標文件路徑,包含文件名</param>
        /// <returns></returns>
        public bool CopyFile(string soucrePath, string targetPath)
        {
            try
            {
                //讀取復制文件流
                using (FileStream fsRead = new FileStream(soucrePath, FileMode.Open, FileAccess.Read))
                {
                    //寫入文件復制流
                    using (FileStream fsWrite = new FileStream(targetPath, FileMode.OpenOrCreate, FileAccess.Write))
                    {
                        byte[] buffer = new byte[1024 * 1024 * 2]; //每次讀取2M
                        //可能文件比較大,要循環讀取,每次讀取2M
                        while (true)
                        {
                            //每次讀取的數據    n:是每次讀取到的實際數據大小
                            int n = fsRead.Read(buffer, 0, buffer.Count());
                            //如果n=0說明讀取的數據為空,已經讀取到最后了,跳出循環
                            if (n == 0)
                            {
                                break;
                            }
                            //寫入每次讀取的實際數據大小
                            fsWrite.Write(buffer, 0, n);
                        }
                    }
                }
                return true;
            }
            catch (System.Exception ex)
            {
                return false;
            }
        }

文件夾復制(路徑都指到文件夾路徑)

/// <summary>
        /// Copy文件夾至
        /// </summary>
        /// <param name="sourceDir">原路徑</param>
        /// <param name="toDir">目標路徑</param>
        public static void CopyDirectInfo(string sourceDir, string toDir)
        {
            if (!Directory.Exists(sourceDir))
            {
                throw new ApplicationException("Source directory does not exist");
            }
            if (!Directory.Exists(toDir))
            {
                Directory.CreateDirectory(toDir);
            }
            DirectoryInfo directInfo = new DirectoryInfo(sourceDir);
            //copy files
            FileInfo[] filesInfos = directInfo.GetFiles();
            foreach (FileInfo fileinfo in filesInfos)
            {
                string fileName = fileinfo.Name;
                File.Copy(fileinfo.FullName, toDir + @"/" + fileName, true);
            }
            //copy directory
            foreach (DirectoryInfo directoryPath in directInfo.GetDirectories())
            {
                string toDirPath = toDir + @"/" + directoryPath.Name;
                CopyDirectInfo(directoryPath.FullName, toDirPath);
            }
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM