ExportWordByNPOI.cs 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469
  1. using NPOI.XWPF.UserModel;
  2. using NPOI.OpenXmlFormats.Wordprocessing;
  3. using SHJX.Service.Control.Extends;
  4. namespace SHJX.Service.Control.Utils
  5. {
  6. public class ExportWordByNPOI : NpoiWordParagraphTextStyle
  7. {
  8. public override void Write(List<EquipmentTask> tasks, string savePath)
  9. {
  10. string fileName = string.Format("GMSY_Result_by_{0}.docx", DateTime.Now.ToString("yyyyMMddHHmmss"), System.Text.Encoding.UTF8);
  11. if (!Directory.Exists(savePath))
  12. {
  13. Directory.CreateDirectory(savePath);
  14. }
  15. using var stream = new FileStream(Path.Combine(savePath, fileName), FileMode.Create, FileAccess.Write);
  16. //创建document文档对象对象实例
  17. XWPFDocument document = new XWPFDocument();
  18. CT_SectPr m_SectPr = new CT_SectPr(); //实例⼀个尺⼨类的实例
  19. m_SectPr.pgSz.w = 16838; //设置宽度(这⾥是⼀个ulong类型)
  20. m_SectPr.pgSz.h = 11906; //设置⾼度(这⾥是⼀个ulong类型)
  21. XWPFDocument doc = new XWPFDocument();
  22. document.Document.body.sectPr = m_SectPr; //设置页⾯的尺⼨
  23. #region Table Header
  24. //创建文档中的表格对象实例
  25. XWPFTable headTable = document.CreateTable(4, 4); //显示的行列数rows:4行,cols:4列
  26. headTable.Width = 5200;//总宽度
  27. headTable.SetColumnWidth(0, 1300); /* 设置列宽 */
  28. headTable.SetColumnWidth(1, 1100); /* 设置列宽 */
  29. headTable.SetColumnWidth(2, 1400); /* 设置列宽 */
  30. headTable.SetColumnWidth(3, 1400); /* 设置列宽 */
  31. //Table 表格第一行展示...后面的都是一样,只改变GetRow中的行数
  32. headTable.GetRow(0).MergeCells(0, 3);//合并3列
  33. headTable.GetRow(0).GetCell(0).SetParagraph(SetTableParagraph(document, headTable, "水质高锰酸盐指数", ParagraphAlignment.CENTER, 24, true));
  34. //Table 表格第二行
  35. headTable.GetRow(1).GetCell(0).SetParagraph(SetTableParagraph(document, headTable, "采样日期", ParagraphAlignment.CENTER, 24, true));
  36. headTable.GetRow(1).GetCell(1).SetParagraph(SetTableParagraph(document, headTable, string.Empty, ParagraphAlignment.CENTER, 24, false));
  37. headTable.GetRow(1).GetCell(2).SetParagraph(SetTableParagraph(document, headTable, "分析日期", ParagraphAlignment.CENTER, 24, true));
  38. headTable.GetRow(1).GetCell(3).SetParagraph(SetTableParagraph(document, headTable, string.Empty, ParagraphAlignment.CENTER, 24, false));
  39. //Table 表格第三行
  40. headTable.GetRow(2).GetCell(0).SetParagraph(SetTableParagraph(document, headTable, "消解时间", ParagraphAlignment.CENTER, 24, true));
  41. headTable.GetRow(2).GetCell(1).SetParagraph(SetTableParagraph(document, headTable, string.Empty, ParagraphAlignment.CENTER, 24, false));
  42. headTable.GetRow(2).GetCell(2).SetParagraph(SetTableParagraph(document, headTable, "检查次数", ParagraphAlignment.CENTER, 24, true));
  43. headTable.GetRow(2).GetCell(3).SetParagraph(SetTableParagraph(document, headTable, string.Empty, ParagraphAlignment.CENTER, 24, false));
  44. headTable.GetRow(3).MergeCells(1, 3);//合并3列
  45. headTable.GetRow(3).GetCell(0).SetParagraph(SetTableParagraph(document, headTable, "分析方法名称及依据", ParagraphAlignment.CENTER, 24, false));
  46. headTable.GetRow(3).GetCell(1).SetParagraph(SetTableParagraph(document, headTable, "《水质高锰酸盐指数的测定(GB 11892-89)》、《国家地表水环境质量监测网监测任务作业指导书(2017)》", ParagraphAlignment.LEFT, 10, false));
  47. #endregion
  48. #region 标定
  49. var acidTask = tasks.Where(item => item.TaskType.Equals(TaskTypeName.CALIBRATION_ZH) && item.AcidBaseProp.Equals(AcidBase.Acid)).ToList();
  50. double acidAvg = 0;
  51. var acid_k = Math.Round(CalculationResult.CalculateType(acidTask, (arg) => 10 / arg, ref acidAvg), 2);
  52. var alkaliTask = tasks.Where(item => item.TaskType.Equals(TaskTypeName.CALIBRATION_ZH) && item.AcidBaseProp.Equals(AcidBase.Alkali)).ToList();
  53. double alkaliAvg = 0;
  54. var alkali_k = Math.Round(CalculationResult.CalculateType(alkaliTask, (arg) => 10 / arg, ref alkaliAvg), 2);
  55. XWPFTable calibrationTable = document.CreateTable(2, 4);
  56. calibrationTable.Width = 5200;//总宽度
  57. calibrationTable.SetColumnWidth(0, 1300); /* 设置列宽 */
  58. calibrationTable.SetColumnWidth(1, 1100); /* 设置列宽 */
  59. calibrationTable.SetColumnWidth(2, 1400); /* 设置列宽 */
  60. calibrationTable.SetColumnWidth(3, 1400); /* 设置列宽 */
  61. calibrationTable.GetRow(0).MergeCells(0, 3);//合并3列
  62. calibrationTable.GetRow(0).GetCell(0).SetParagraph(SetTableParagraph(document, calibrationTable, "标定", ParagraphAlignment.CENTER, 24, true));
  63. calibrationTable.GetRow(1).MergeCells(1, 2);//合并3列
  64. calibrationTable.GetRow(1).GetCell(0).SetParagraph(SetTableParagraph(document, calibrationTable, "草酸钠标液浓度", ParagraphAlignment.CENTER, 24, true));
  65. calibrationTable.GetRow(1).GetCell(1).SetParagraph(SetTableParagraph(document, calibrationTable, "标定高锰酸钾体积V2(ml)", ParagraphAlignment.CENTER, 24, true));
  66. calibrationTable.GetRow(1).GetCell(2).SetParagraph(SetTableParagraph(document, calibrationTable, "K=10/v2", ParagraphAlignment.CENTER, 24, true));
  67. CT_Row nr = new CT_Row();
  68. XWPFTableRow mr = new XWPFTableRow(nr, calibrationTable);//创建行
  69. calibrationTable.AddRow(mr);//将行添加到table中
  70. XWPFTableCell c1 = mr.CreateCell();//创建单元格
  71. CT_Tc ct = c1.GetCTTc();
  72. CT_TcPr cp = ct.AddNewTcPr();
  73. cp.AddNewVMerge().val = ST_Merge.restart;//合并行
  74. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  75. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  76. ct.GetPList()[0].AddNewR().AddNewT().Value = " 0.01mol/l";
  77. c1 = mr.CreateCell();//创建单元格
  78. ct = c1.GetCTTc();
  79. cp = ct.AddNewTcPr();
  80. cp.AddNewVAlign().val = ST_VerticalJc.center;
  81. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  82. ct.GetPList()[0].AddNewR().AddNewT().Value = "酸性法";
  83. c1 = mr.CreateCell();//创建单元格
  84. ct = c1.GetCTTc();
  85. cp = ct.AddNewTcPr();
  86. cp.AddNewVAlign().val = ST_VerticalJc.center;
  87. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  88. ct.GetPList()[0].AddNewR().AddNewT().Value = $"{acidAvg:F2}";
  89. c1 = mr.CreateCell();//创建单元格
  90. ct = c1.GetCTTc();
  91. cp = ct.AddNewTcPr();
  92. cp.AddNewVAlign().val = ST_VerticalJc.center;
  93. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  94. ct.GetPList()[0].AddNewR().AddNewT().Value = $"{acid_k:F2}";
  95. nr = new CT_Row();
  96. mr = new XWPFTableRow(nr, calibrationTable);
  97. calibrationTable.AddRow(mr);
  98. c1 = mr.CreateCell();//创建单元格
  99. ct = c1.GetCTTc();
  100. cp = ct.AddNewTcPr();
  101. cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号
  102. c1 = mr.CreateCell();//创建单元格
  103. ct = c1.GetCTTc();
  104. cp = ct.AddNewTcPr();
  105. cp.AddNewVAlign().val = ST_VerticalJc.center;
  106. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  107. ct.GetPList()[0].AddNewR().AddNewT().Value = "碱性法";
  108. c1 = mr.CreateCell();//创建单元格
  109. ct = c1.GetCTTc();
  110. cp = ct.AddNewTcPr();
  111. cp.AddNewVAlign().val = ST_VerticalJc.center;
  112. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  113. ct.GetPList()[0].AddNewR().AddNewT().Value = $"{alkaliAvg:F2}";
  114. c1 = mr.CreateCell();//创建单元格
  115. ct = c1.GetCTTc();
  116. cp = ct.AddNewTcPr();
  117. cp.AddNewVAlign().val = ST_VerticalJc.center;
  118. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  119. ct.GetPList()[0].AddNewR().AddNewT().Value = $"{alkali_k:F2}";
  120. #endregion
  121. #region Sample Head
  122. XWPFTable sampleHeadTable = document.CreateTable(1, 7);
  123. sampleHeadTable.Width = 5180;//总宽度
  124. for (int i = 0; i < 7; i++)
  125. {
  126. sampleHeadTable.SetColumnWidth(i, 740); /* 设置列宽 */
  127. }
  128. sampleHeadTable.GetRow(0).MergeCells(0, 6);//合并3列
  129. sampleHeadTable.GetRow(0).GetCell(0).SetParagraph(SetTableParagraph(document, sampleHeadTable, "水样测试", ParagraphAlignment.CENTER, 24, true));
  130. nr = new CT_Row();
  131. mr = new XWPFTableRow(nr, calibrationTable);//创建行
  132. sampleHeadTable.AddRow(mr);//将行添加到table中
  133. c1 = mr.CreateCell();//创建单元格
  134. ct = c1.GetCTTc();
  135. cp = ct.AddNewTcPr();
  136. cp.AddNewVMerge().val = ST_Merge.restart;//合并行
  137. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  138. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  139. ct.GetPList()[0].AddNewR().AddNewT().Value = "序号";
  140. c1 = mr.CreateCell();//创建单元格
  141. ct = c1.GetCTTc();
  142. cp = ct.AddNewTcPr();
  143. cp.AddNewVMerge().val = ST_Merge.restart;//合并行
  144. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  145. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  146. ct.GetPList()[0].AddNewR().AddNewT().Value = "样品编号";
  147. string[] title = new string[] { "测定", "取样", "稀释", "高锰酸钾溶液" };
  148. foreach (var item in title)
  149. {
  150. c1 = mr.CreateCell();//创建单元格
  151. ct = c1.GetCTTc();
  152. cp = ct.AddNewTcPr();
  153. cp.AddNewVAlign().val = ST_VerticalJc.center;
  154. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  155. ct.GetPList()[0].AddNewR().AddNewT().Value = item;
  156. }
  157. c1 = mr.CreateCell();//创建单元格
  158. ct = c1.GetCTTc();
  159. cp = ct.AddNewTcPr();
  160. cp.AddNewVMerge().val = ST_Merge.restart;//合并行
  161. cp.AddNewVAlign().val = ST_VerticalJc.center;
  162. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  163. ct.GetPList()[0].AddNewR().AddNewT().Value = "样品浓度(mg/L)";
  164. nr = new CT_Row();
  165. mr = new XWPFTableRow(nr, sampleHeadTable);
  166. sampleHeadTable.AddRow(mr);
  167. c1 = mr.CreateCell();//创建单元格
  168. ct = c1.GetCTTc();
  169. cp = ct.AddNewTcPr();
  170. cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号
  171. c1 = mr.CreateCell();//创建单元格
  172. ct = c1.GetCTTc();
  173. cp = ct.AddNewTcPr();
  174. cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号
  175. title = new string[] { "方法", "体积(ml)", "倍数", "消耗量(ml)" };
  176. foreach (var item in title)
  177. {
  178. c1 = mr.CreateCell();//创建单元格
  179. ct = c1.GetCTTc();
  180. cp = ct.AddNewTcPr();
  181. cp.AddNewVAlign().val = ST_VerticalJc.center;
  182. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//单元格内容居中显示
  183. ct.GetPList()[0].AddNewR().AddNewT().Value = item;
  184. }
  185. c1 = mr.CreateCell();//创建单元格
  186. ct = c1.GetCTTc();
  187. cp = ct.AddNewTcPr();
  188. cp.AddNewVMerge().val = ST_Merge.@continue;//合并行 序号
  189. #endregion
  190. #region Sample Content
  191. List<EquipmentTask> blankTasks = tasks.Where(item => item.TaskType.Equals(TaskTypeName.BLANK_ZH)).ToList();
  192. List<EquipmentTask> sampleTasks = tasks.Where(item => item.TaskType.Equals(TaskTypeName.SAMPLE_ZH)).ToList();
  193. int sampleCount = blankTasks.Count + sampleTasks.Count;
  194. XWPFTable sampleContentTable = document.CreateTable(sampleCount, 7);
  195. sampleContentTable.Width = 5180;//总宽度
  196. for (int i = 0; i < 7; i++)
  197. {
  198. sampleContentTable.SetColumnWidth(i, 740); /* 设置列宽 */
  199. }
  200. int index = 0;
  201. foreach (var item in blankTasks)
  202. {
  203. sampleContentTable.GetRow(index).GetCell(0).SetParagraph(SetTableParagraph(document, headTable, $"{index}", ParagraphAlignment.CENTER, 24, true));
  204. sampleContentTable.GetRow(index).GetCell(1).SetParagraph(SetTableParagraph(document, headTable, item.TaskDetailName, ParagraphAlignment.CENTER, 24, false));
  205. sampleContentTable.GetRow(index).GetCell(2).SetParagraph(SetTableParagraph(document, headTable, item.AcidBaseProp.Equals(AcidBase.Acid) ? "酸性法" : "碱性法", ParagraphAlignment.CENTER, 24, true));
  206. sampleContentTable.GetRow(index).GetCell(3).SetParagraph(SetTableParagraph(document, headTable, $"{item.SampleVolume:F2}", ParagraphAlignment.CENTER, 24, false));
  207. sampleContentTable.GetRow(index).GetCell(4).SetParagraph(SetTableParagraph(document, headTable, $"{item.SampleMultiple:F2}", ParagraphAlignment.CENTER, 24, false));
  208. sampleContentTable.GetRow(index).GetCell(5).SetParagraph(SetTableParagraph(document, headTable, $"{item.Amount:F2}", ParagraphAlignment.CENTER, 24, false));
  209. sampleContentTable.GetRow(index).GetCell(6).SetParagraph(SetTableParagraph(document, headTable, $"{item.Result:F2}", ParagraphAlignment.CENTER, 24, false));
  210. index++;
  211. }
  212. foreach (var item in sampleTasks)
  213. {
  214. sampleContentTable.GetRow(index).GetCell(0).SetParagraph(SetTableParagraph(document, headTable, $"{index}", ParagraphAlignment.CENTER, 24, true));
  215. sampleContentTable.GetRow(index).GetCell(1).SetParagraph(SetTableParagraph(document, headTable, item.TaskDetailName, ParagraphAlignment.CENTER, 24, false));
  216. sampleContentTable.GetRow(index).GetCell(2).SetParagraph(SetTableParagraph(document, headTable, item.AcidBaseProp.Equals(AcidBase.Acid) ? "酸性法" : "碱性法", ParagraphAlignment.CENTER, 24, true));
  217. sampleContentTable.GetRow(index).GetCell(3).SetParagraph(SetTableParagraph(document, headTable, $"{item.SampleVolume:F2}", ParagraphAlignment.CENTER, 24, false));
  218. sampleContentTable.GetRow(index).GetCell(4).SetParagraph(SetTableParagraph(document, headTable, $"{item.SampleMultiple:F2}", ParagraphAlignment.CENTER, 24, false));
  219. sampleContentTable.GetRow(index).GetCell(5).SetParagraph(SetTableParagraph(document, headTable, $"{item.Amount:F2}", ParagraphAlignment.CENTER, 24, false));
  220. sampleContentTable.GetRow(index).GetCell(6).SetParagraph(SetTableParagraph(document, headTable, $"{item.Result:F2}", ParagraphAlignment.CENTER, 24, false));
  221. index++;
  222. }
  223. #endregion
  224. #region Table Footer
  225. XWPFTable footTable = document.CreateTable(1, 7);
  226. footTable.Width = 5180;//总宽度
  227. for (int i = 0; i < 7; i++)
  228. {
  229. footTable.SetColumnWidth(i, 740); /* 设置列宽 */
  230. }
  231. footTable.RemoveRow(0);
  232. nr = new CT_Row();
  233. mr = new XWPFTableRow(nr, footTable);//创建行
  234. footTable.AddRow(mr);//将行添加到table中
  235. c1 = mr.CreateCell();//创建单元格
  236. ct = c1.GetCTTc();
  237. cp = ct.AddNewTcPr();
  238. cp.AddNewVMerge().val = ST_Merge.restart;//合并行
  239. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  240. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  241. ct.GetPList()[0].AddNewR().AddNewT().Value = "准确度";
  242. c1 = mr.CreateCell();//创建单元格
  243. ct = c1.GetCTTc();
  244. cp = ct.AddNewTcPr();
  245. cp.gridSpan = new CT_DecimalNumber();
  246. cp.gridSpan.val = Convert.ToString(2); //合并列
  247. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  248. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  249. ct.GetPList()[0].AddNewR().AddNewT().Value = "质控样品编号";
  250. c1 = mr.CreateCell();//创建单元格
  251. ct = c1.GetCTTc();
  252. cp = ct.AddNewTcPr();
  253. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  254. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  255. ct.GetPList()[0].AddNewR().AddNewT().Value = "真值(mg/l)";
  256. c1 = mr.CreateCell();//创建单元格
  257. ct = c1.GetCTTc();
  258. cp = ct.AddNewTcPr();
  259. cp.gridSpan = new CT_DecimalNumber();
  260. cp.gridSpan.val = Convert.ToString(2); //合并列
  261. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  262. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  263. ct.GetPList()[0].AddNewR().AddNewT().Value = "测试含量(mg/l)";
  264. c1 = mr.CreateCell();//创建单元格
  265. ct = c1.GetCTTc();
  266. cp = ct.AddNewTcPr();
  267. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  268. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  269. ct.GetPList()[0].AddNewR().AddNewT().Value = "是否合格";
  270. for (int i = 0; i < 2; i++)
  271. {
  272. nr = new CT_Row();
  273. mr = new XWPFTableRow(nr, footTable);//创建行
  274. footTable.AddRow(mr);//将行添加到table中
  275. c1 = mr.CreateCell();//创建单元格
  276. ct = c1.GetCTTc();
  277. cp = ct.AddNewTcPr();
  278. cp.AddNewVMerge().val = ST_Merge.@continue;//合并行
  279. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  280. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  281. c1 = mr.CreateCell();//创建单元格
  282. ct = c1.GetCTTc();
  283. cp = ct.AddNewTcPr();
  284. cp.gridSpan = new CT_DecimalNumber();
  285. cp.gridSpan.val = Convert.ToString(2); //合并列
  286. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  287. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  288. for (int j = 0; j < 4; j++)
  289. {
  290. c1 = mr.CreateCell();//创建单元格
  291. ct = c1.GetCTTc();
  292. cp = ct.AddNewTcPr();
  293. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  294. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  295. }
  296. }
  297. nr = new CT_Row();
  298. mr = new XWPFTableRow(nr, footTable);//创建行
  299. footTable.AddRow(mr);//将行添加到table中
  300. c1 = mr.CreateCell();//创建单元格
  301. ct = c1.GetCTTc();
  302. cp = ct.AddNewTcPr();
  303. cp.AddNewVMerge().val = ST_Merge.restart;//合并行
  304. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  305. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  306. ct.GetPList()[0].AddNewR().AddNewT().Value = "精密度";
  307. for (int i = 0; i < 2; i++)
  308. {
  309. c1 = mr.CreateCell();//创建单元格
  310. ct = c1.GetCTTc();
  311. cp = ct.AddNewTcPr();
  312. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  313. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  314. ct.GetPList()[0].AddNewR().AddNewT().Value = "平行样编号";
  315. c1 = mr.CreateCell();//创建单元格
  316. ct = c1.GetCTTc();
  317. cp = ct.AddNewTcPr();
  318. cp.gridSpan = new CT_DecimalNumber();
  319. cp.gridSpan.val = Convert.ToString(2); //合并列
  320. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  321. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  322. }
  323. nr = new CT_Row();
  324. mr = new XWPFTableRow(nr, footTable);//创建行
  325. footTable.AddRow(mr);//将行添加到table中
  326. c1 = mr.CreateCell();//创建单元格
  327. ct = c1.GetCTTc();
  328. cp = ct.AddNewTcPr();
  329. cp.AddNewVMerge().val = ST_Merge.@continue;//合并行
  330. for (int i = 0; i < 2; i++)
  331. {
  332. c1 = mr.CreateCell();//创建单元格
  333. ct = c1.GetCTTc();
  334. cp = ct.AddNewTcPr();
  335. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  336. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  337. ct.GetPList()[0].AddNewR().AddNewT().Value = "测试含量(mg/l)";
  338. for (int j = 0; j < 2; j++)
  339. {
  340. c1 = mr.CreateCell();//创建单元格
  341. ct = c1.GetCTTc();
  342. cp = ct.AddNewTcPr();
  343. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  344. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  345. }
  346. }
  347. title = new string[] { "均值", "相对偏差(%)" };
  348. foreach (var item in title)
  349. {
  350. nr = new CT_Row();
  351. mr = new XWPFTableRow(nr, footTable);//创建行
  352. footTable.AddRow(mr);//将行添加到table中
  353. c1 = mr.CreateCell();//创建单元格
  354. ct = c1.GetCTTc();
  355. cp = ct.AddNewTcPr();
  356. cp.AddNewVMerge().val = ST_Merge.@continue;//合并行
  357. for (int i = 0; i < 2; i++)
  358. {
  359. c1 = mr.CreateCell();//创建单元格
  360. ct = c1.GetCTTc();
  361. cp = ct.AddNewTcPr();
  362. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  363. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  364. ct.GetPList()[0].AddNewR().AddNewT().Value = item;
  365. c1 = mr.CreateCell();//创建单元格
  366. ct = c1.GetCTTc();
  367. cp = ct.AddNewTcPr();
  368. cp.gridSpan = new CT_DecimalNumber();
  369. cp.gridSpan.val = Convert.ToString(2); //合并列
  370. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  371. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  372. }
  373. }
  374. nr = new CT_Row();
  375. mr = new XWPFTableRow(nr, footTable);//创建行
  376. footTable.AddRow(mr);//将行添加到table中
  377. title = new string[] { "分析人", "校准人" };
  378. foreach (var item in title)
  379. {
  380. c1 = mr.CreateCell();//创建单元格
  381. ct = c1.GetCTTc();
  382. cp = ct.AddNewTcPr();
  383. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  384. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  385. ct.GetPList()[0].AddNewR().AddNewT().Value = item;
  386. c1 = mr.CreateCell();//创建单元格
  387. ct = c1.GetCTTc();
  388. cp = ct.AddNewTcPr();
  389. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  390. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  391. }
  392. c1 = mr.CreateCell();//创建单元格
  393. ct = c1.GetCTTc();
  394. cp = ct.AddNewTcPr();
  395. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  396. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  397. ct.GetPList()[0].AddNewR().AddNewT().Value = "审核人";
  398. c1 = mr.CreateCell();//创建单元格
  399. ct = c1.GetCTTc();
  400. cp = ct.AddNewTcPr();
  401. cp.gridSpan = new CT_DecimalNumber();
  402. cp.gridSpan.val = Convert.ToString(2); //合并列
  403. cp.AddNewVAlign().val = ST_VerticalJc.center;//垂直
  404. ct.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;
  405. #endregion
  406. document.Write(stream);
  407. }
  408. }
  409. }