C#使用Aspose.Words操作word文檔(利用模板2)

最近接到個需求,由於客服這邊要導出大量有一定規則的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);
            }
        }

複製代碼

 

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