ExportWordByNPOI.cs 25 KB

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