AsposeHelper.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. using Aspose.Cells;
  2. using Aspose.Words;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.IO;
  6. using System.Web;
  7. using Ubiety.Dns.Core;
  8. namespace OASystem.API.OAMethodLib.File
  9. {
  10. /// <summary>
  11. /// asponse 文档操作
  12. /// </summary>
  13. public class AsposeHelper
  14. {
  15. #region DownWordToModel
  16. /// <summary>
  17. /// 根据Word模板进行数据的导出Word操作
  18. /// </summary>
  19. /// <param name="tempFileName">模板文件名称</param>
  20. /// <param name="saveFolderName">保存文件夹名称</param>
  21. /// <param name="dic">数据源 key 对应 value</param>
  22. /// <param name="listDt">需要循环的数据DataTable 多个注意DataTableName </param>
  23. /// <returns>返回的文档路径</returns>
  24. public static string ExpertWordToModel(string tempFileName, string saveFolderName, string saveFilName, Dictionary<string,object> dic,
  25. List<DataTable>? listDt)
  26. {
  27. try
  28. {
  29. removeWatermark();//加载监听,用于去除水印
  30. List<string> fieldNames=new List<string>(); //字段名字符串数组
  31. List<object> fieldValues = new List<object>(); //字段值数组
  32. foreach (string key in dic.Keys)
  33. {
  34. fieldNames.Add(key);
  35. fieldValues.Add(dic[key]);
  36. }
  37. string tempPath = string.Format("{0}/Word/Template/{1}", AppSettingsHelper.Get("OfficeTempBasePath"), tempFileName);
  38. //载入模板
  39. Document doc = new Document(tempPath);
  40. doc.MailMerge.Execute(fieldNames.ToArray(), fieldValues.ToArray());
  41. //将我们获得的DataTable类型的数据:EduDataTable放入doc方法中做处理
  42. if (listDt != null && listDt.Count > 0)
  43. {
  44. foreach (DataTable dt in listDt)
  45. {
  46. if (dt != null && dt.Rows.Count > 0)
  47. {
  48. doc.MailMerge.ExecuteWithRegions(dt);
  49. }
  50. }
  51. }
  52. //合并模版,相当于页面的渲染
  53. doc.MailMerge.Execute(new[] { "PageCount" }, new object[] { doc.PageCount });
  54. //"OfficeTempBasePath": "C:/Server/File/OA2023/Office/"
  55. //saveFolderName:TencentOCR
  56. string path = string.Format("{0}/Word/{1}", AppSettingsHelper.Get("OfficeTempBasePath"), saveFolderName);
  57. if (!System.IO.Directory.Exists(path))
  58. {
  59. System.IO.Directory.CreateDirectory(path);//不存在就创建文件夹
  60. }
  61. string saveFilePath = string.Format("{0}/{1}", path, saveFilName);
  62. //保存合并后的文档
  63. doc.Save(saveFilePath);
  64. saveFilePath = saveFilePath.Replace("C:/Server/File/OA2023/", AppSettingsHelper.Get("OfficeBaseUrl")); //返回下载地址
  65. return saveFilePath; //返回下载地址
  66. }
  67. catch (Exception ex)
  68. {
  69. return ex.Message;
  70. }
  71. }
  72. /// <summary>
  73. /// 加载监听,用于去除水印
  74. /// </summary>
  75. public static void removeWatermark()
  76. {
  77. new Aspose.Words.License().SetLicense(new MemoryStream(Convert.FromBase64String("PExpY2Vuc2U+CiAgPERhdGE+CiAgICA8TGljZW5zZWRUbz5TdXpob3UgQXVuYm94IFNvZnR3YXJlIENvLiwgTHRkLjwvTGljZW5zZWRUbz4KICAgIDxFbWFpbFRvPnNhbGVzQGF1bnRlYy5jb208L0VtYWlsVG8+CiAgICA8TGljZW5zZVR5cGU+RGV2ZWxvcGVyIE9FTTwvTGljZW5zZVR5cGU+CiAgICA8TGljZW5zZU5vdGU+TGltaXRlZCB0byAxIGRldmVsb3BlciwgdW5saW1pdGVkIHBoeXNpY2FsIGxvY2F0aW9uczwvTGljZW5zZU5vdGU+CiAgICA8T3JkZXJJRD4yMDA2MDIwMTI2MzM8L09yZGVySUQ+CiAgICA8VXNlcklEPjEzNDk3NjAwNjwvVXNlcklEPgogICAgPE9FTT5UaGlzIGlzIGEgcmVkaXN0cmlidXRhYmxlIGxpY2Vuc2U8L09FTT4KICAgIDxQcm9kdWN0cz4KICAgICAgPFByb2R1Y3Q+QXNwb3NlLlRvdGFsIGZvciAuTkVUPC9Qcm9kdWN0PgogICAgPC9Qcm9kdWN0cz4KICAgIDxFZGl0aW9uVHlwZT5FbnRlcnByaXNlPC9FZGl0aW9uVHlwZT4KICAgIDxTZXJpYWxOdW1iZXI+OTM2ZTVmZDEtODY2Mi00YWJmLTk1YmQtYzhkYzBmNTNhZmE2PC9TZXJpYWxOdW1iZXI+CiAgICA8U3Vic2NyaXB0aW9uRXhwaXJ5PjIwMjEwODI3PC9TdWJzY3JpcHRpb25FeHBpcnk+CiAgICA8TGljZW5zZVZlcnNpb24+My4wPC9MaWNlbnNlVmVyc2lvbj4KICAgIDxMaWNlbnNlSW5zdHJ1Y3Rpb25zPmh0dHBzOi8vcHVyY2hhc2UuYXNwb3NlLmNvbS9wb2xpY2llcy91c2UtbGljZW5zZTwvTGljZW5zZUluc3RydWN0aW9ucz4KICA8L0RhdGE+CiAgPFNpZ25hdHVyZT5wSkpjQndRdnYxV1NxZ1kyOHFJYUFKSysvTFFVWWRrQ2x5THE2RUNLU0xDQ3dMNkEwMkJFTnh5L3JzQ1V3UExXbjV2bTl0TDRQRXE1aFAzY2s0WnhEejFiK1JIWTBuQkh1SEhBY01TL1BSeEJES0NGbWg1QVFZRTlrT0FxSzM5NVBSWmJRSGowOUNGTElVUzBMdnRmVkp5cUhjblJvU3dPQnVqT1oyeDc4WFE9PC9TaWduYXR1cmU+CjwvTGljZW5zZT4=")));
  78. }
  79. #endregion
  80. #region DownExcelToModel
  81. /// <summary>
  82. /// 根据Word模板进行数据的导出Word操作
  83. /// </summary>
  84. /// <param name="tempFileName">Excel模板文件名称</param>
  85. /// <param name="saveFolderName">保存文件夹名称</param>
  86. /// <param name="saveFilName">保存文件名称</param>
  87. /// <param name="dic">数据源 key 对应 value</param>
  88. /// <param name="listDt">需要循环的数据DataTable 多个注意DataTableName </param>
  89. /// <returns>返回的文档路径</returns>
  90. public static string ExpertExcelToModel(string tempFileName, string saveFolderName, string saveFilName, Dictionary<string, object> dic,
  91. List<DataTable>? listDt)
  92. {
  93. try
  94. {
  95. string tempPath = string.Format("{0}/Excel/Template/{1}",AppSettingsHelper.Get("OfficeTempBasePath"), tempFileName);
  96. //载入模板
  97. Workbook wbook = new Workbook(tempPath);
  98. //默认第一个工作表
  99. Worksheet wSheet = wbook.Worksheets[0];
  100. WorkbookDesigner designer = new WorkbookDesigner(wbook);
  101. //数据源 多个
  102. if (listDt != null && listDt.Count > 0)
  103. {
  104. foreach (var item in listDt)
  105. {
  106. if (item.Rows.Count > 0)
  107. {
  108. designer.SetDataSource(item.TableName, item);
  109. }
  110. }
  111. }
  112. //报表单位
  113. if (dic.Count > 0)
  114. {
  115. foreach (var item in dic)
  116. {
  117. designer.SetDataSource(item.Key, item.Value);
  118. }
  119. }
  120. designer.Process();
  121. string path = string.Format("{0}/Excel/{1}", AppSettingsHelper.Get("OfficeTempBasePath"), saveFolderName);
  122. if (!System.IO.Directory.Exists(path))
  123. {
  124. System.IO.Directory.CreateDirectory(path);//不存在就创建文件夹
  125. }
  126. string saveFilePath = string.Format("{0}{1}", path, saveFilName);
  127. //保存合并后的文档
  128. wbook.Save(saveFilePath);
  129. saveFilePath = saveFilePath.Replace("C:", AppSettingsHelper.Get("OfficeBaseUrl")); //返回下载地址
  130. return saveFilePath; //返回下载地址
  131. }
  132. catch (Exception ex)
  133. {
  134. return ex.Message;
  135. }
  136. }
  137. #endregion
  138. }
  139. }