DCRExport.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /* ==============================================================================
  2. * 功能描述:数据检查结果导出
  3. * 创 建 者:Garrett
  4. * 创建日期:2018/11/5 14:33:42
  5. * ==============================================================================*/
  6. using System;
  7. using System.IO;
  8. using Microsoft.Win32;
  9. using NPOI.SS.UserModel;
  10. using NPOI.XSSF.UserModel;
  11. using Saga.PlugIn.CreateFacility;
  12. using SAGA.DotNetUtils;
  13. using SAGA.DotNetUtils.Others;
  14. namespace Saga.PlugIn.ModelCheck
  15. {
  16. /// <summary>
  17. /// DataCheckResultExport
  18. /// </summary>
  19. public static class DCRExport
  20. {
  21. public static string MCRPath = Path.Combine(AppBaseInfo.DllRunPath, @"ModelCheck\ExcelTemplate\模型检查结果输出格式-模版.xlsx");
  22. /// <summary>
  23. /// 获取导出Excel
  24. /// </summary>
  25. /// <returns></returns>
  26. public static string GetExportPath(string defaultPath = null)
  27. {
  28. SaveFileDialog sflg = new SaveFileDialog();
  29. if (File.Exists(defaultPath))
  30. sflg.FileName = defaultPath;
  31. sflg.Filter = "Excel(*.xlsx)|*.xlsx";
  32. if (sflg.ShowDialog() != true) return defaultPath;
  33. string fileName = sflg.FileName;
  34. if (fileName.IsNullOrEmpty())
  35. {
  36. fileName = defaultPath;
  37. }
  38. return fileName;
  39. }
  40. private static string m_FileName= MCRPath;
  41. /// <summary>
  42. /// 设置模版地址
  43. /// </summary>
  44. /// <param name="fileName"></param>
  45. public static void SetTemplatePath(string fileName)
  46. {
  47. m_FileName = fileName;
  48. }
  49. private static IWorkbook m_ExportWorkBook;
  50. public static IWorkbook GetWorkbook(bool isreset = false)
  51. {
  52. if (isreset)
  53. {
  54. ClearWorkbook();
  55. }
  56. if (m_ExportWorkBook == null)
  57. {
  58. if (File.Exists(m_FileName))
  59. {
  60. using (var fileStream = new System.IO.FileStream(m_FileName, FileMode.Open, FileAccess.Read))
  61. {
  62. m_ExportWorkBook = new XSSFWorkbook(fileStream); //xlsx数据读入workbook
  63. }
  64. }
  65. else
  66. {
  67. m_ExportWorkBook = null;
  68. }
  69. }
  70. return m_ExportWorkBook;
  71. }
  72. /// <summary>
  73. /// 联接到指定Sheet页
  74. /// </summary>
  75. /// <param name="sheetName"></param>
  76. /// <returns></returns>
  77. public static XSSFHyperlink CreateLink(string sheetName)
  78. {
  79. XSSFHyperlink link=new XSSFHyperlink(HyperlinkType.Document);
  80. link.Address = $"'{sheetName}'!A1";
  81. return link;
  82. }
  83. /// <summary>
  84. /// 重置workbook
  85. /// </summary>
  86. public static void ClearWorkbook()
  87. {
  88. m_ExportWorkBook = null;
  89. }
  90. /// <summary>
  91. /// 保存
  92. /// </summary>
  93. /// <param name="fileName"></param>
  94. /// <param name="book"></param>
  95. /// <returns></returns>
  96. public static bool Save(string fileName, IWorkbook book)
  97. {
  98. bool result = true;
  99. try
  100. {
  101. bool allVisible = true;
  102. //判断全部都隐藏不保存
  103. for (int i = 0; i < book.NumberOfSheets - 1; i++)
  104. {
  105. bool tempVisible = book.IsSheetVeryHidden(i);
  106. if (!tempVisible)
  107. {
  108. allVisible = false;
  109. }
  110. }
  111. if (allVisible)
  112. {
  113. MessageShowBase.Infomation("所有检查项都通过检查,取消保存");
  114. return result;
  115. }
  116. MemoryStream ms = new MemoryStream();
  117. book.Write(ms);
  118. using (System.IO.FileStream fs = new System.IO.FileStream(fileName, FileMode.Create, FileAccess.Write))
  119. {
  120. byte[] data = ms.ToArray();
  121. fs.Write(data, 0, data.Length);
  122. fs.Flush();
  123. }
  124. ms.Close();
  125. ms.Dispose();
  126. }
  127. catch (Exception e)
  128. {
  129. Console.WriteLine(e);
  130. result = false;
  131. }
  132. return result;
  133. }
  134. }
  135. }