最近接到個需求,因爲客服這邊要導出大量有必定規則的word文件,裏面的內容但願系統自動填充,例如ui
這裏我使用Aspose.Words.dll這個類庫,spa
1.首先,咱們須要建立模板文件,畢竟有規則的東西纔好開發。在各個位置處添加書籤,以下:code
2.核心方法以下,因爲我這邊需求最多填充四個參數:中文品名、英文描述、HAWB、件數,因此下面方法就定義這幾個變量。其中,有些模板若不須要個別參數,直接傳空值就行。blog
/// <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 }
另附上文件的複製和整個文件夾的複製開發
文件複製(路徑都準確到文件名):get
/// <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; } }
文件夾複製(路徑都指到文件夾路徑)string
/// <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); } }