记一次Word预览及保存

  • 使用工具
  1. Word解析:http://npoi.codeplex.com/
  2. Document preview:https://www.devexpress.com/
  3. Document preview 帮助文档:https://documentation.devexpress.com/#WindowsForms/CustomDocument3227
  • Demo
  1 namespace WordDemo
  2 {
  3     public partial class Form1 : Form
  4     {
  5         public Form1()
  6         {
  7             InitializeComponent();
  8         }
  9 
 10         private void Form1_Load(object sender, EventArgs e)
 11         {
 12             //创建文档
 13             XWPFDocument doc = new XWPFDocument();
 14 
 15             //标题
 16             XWPFParagraph p1 = doc.CreateParagraph();
 17 
 18             XWPFRun r1 = p1.CreateRun();
 19             r1.FontSize = 23;
 20             r1.SetText("先进个人基本信息");
 21             r1.SetTextPosition(30);
 22 
 23             CT_P doc_p1 = doc.Document.body.GetPArray(0);//标题居中
 24             doc_p1.AddNewPPr().AddNewJc().val = ST_Jc.center;
 25 
 26             //创建表格
 27             XWPFTable table = doc.CreateTable();//行,列
 28 
 29             table.RemoveRow(0);
 30 
 31 
 32             #region
 33 
 34             //for (int i = 0; i < table.Rows.Count; i++)//水平和垂直居中
 35             //{
 36             //    for (int j = 0; j < table.Rows.Count; j++)
 37             //    {
 38             //        CT_Tc cttc = table.GetRow(i).GetCell(j).GetCTTc();
 39 
 40             //        CT_TcPr ctpr = cttc.AddNewTcPr();
 41 
 42             //        cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
 43 
 44             //        ctpr.AddNewVAlign().val = ST_VerticalJc.center;//垂直居中
 45             //    }
 46             //}
 47 
 48             //SetColSpan(table.GetRow(2).GetCell(1), 2);
 49             //SetColSpan(table.GetRow(2).GetCell(4), 2);
 50 
 51             //SetColSpan(table.GetRow(3).GetCell(1), 2);
 52             //SetColSpan(table.GetRow(3).GetCell(4), 2);
 53 
 54             //SetColSpan(table.GetRow(5).GetCell(1), 2);
 55             //SetColSpan(table.GetRow(5).GetCell(4), 2);
 56 
 57             //SetColSpan(table.GetRow(6).GetCell(1), 7);
 58 
 59             //SetColSpan(table.GetRow(7).GetCell(1), 7);
 60 
 61             #endregion
 62 
 63 
 64             //2.表格内容
 65             XWPFTableRow row_0 = CreateRow(table);//第一行
 66 
 67             XWPFTableCell cell_0_0 = CreateCell(row_0);
 68             cell_0_0.SetText("姓名");
 69             XWPFTableCell cell_0_1 = CreateCell(row_0);
 70             cell_0_1.SetText("");
 71             XWPFTableCell cell_0_2 = CreateCell(row_0);
 72             cell_0_2.SetText("性别");
 73             XWPFTableCell cell_0_3 = CreateCell(row_0);
 74             cell_0_3.SetText("");
 75             XWPFTableCell cell_0_4 = CreateCell(row_0);
 76             cell_0_4.SetText("民族");
 77             XWPFTableCell cell_0_5 = CreateCell(row_0);
 78             cell_0_5.SetText("");
 79             XWPFTableCell cell_0_6 = CreateCell(row_0);
 80             cell_0_6.SetText("出生年月");
 81             XWPFTableCell cell_0_7 = CreateCell(row_0);
 82             cell_0_7.SetText("");
 83 
 84             XWPFTableRow row_1 = CreateRow(table);//第二行
 85             XWPFTableCell cell_1_0 = CreateCell(row_1);
 86             cell_1_0.SetText("政治面貌");
 87             XWPFTableCell cell_1_1 = CreateCell(row_1);
 88             cell_1_1.SetText("");
 89             XWPFTableCell cell_1_2 = CreateCell(row_1);
 90             cell_1_2.SetText("籍贯");
 91             XWPFTableCell cell_1_3 = CreateCell(row_1);
 92             cell_1_3.SetText("");
 93             XWPFTableCell cell_1_4 = CreateCell(row_1);
 94             cell_1_4.SetText("学历");
 95             XWPFTableCell cell_1_5 = CreateCell(row_1);
 96             cell_1_5.SetText("");
 97             XWPFTableCell cell_1_6 = CreateCell(row_1);
 98             cell_1_6.SetText("参加工作时间");
 99             XWPFTableCell cell_1_7 = CreateCell(row_1);
100             cell_1_7.SetText("");
101 
102             XWPFTableRow row_2 = CreateRow(table);//第三行
103             XWPFTableCell cell_2_0 = CreateCell(row_2);
104             cell_2_0.SetText("所在单位");
105             XWPFTableCell cell_2_1 = CreateCell(row_2);
106             SetColSpan(cell_2_1, 2);//合并单元格
107             cell_2_1.SetText("");
108             XWPFTableCell cell_2_2 = CreateCell(row_2);
109             cell_2_2.SetText("所属部门");
110             XWPFTableCell cell_2_3 = CreateCell(row_2);
111             SetColSpan(cell_2_3, 2);
112             cell_2_3.SetText("");
113             XWPFTableCell cell_2_4 = CreateCell(row_2);
114             cell_2_4.SetText("隶属系统");
115             XWPFTableCell cell_2_5 = CreateCell(row_2);
116             cell_2_5.SetText("");
117 
118             XWPFTableRow row_3 = CreateRow(table);//第四行
119             XWPFTableCell cell_3_0 = CreateCell(row_3);
120             cell_3_0.SetText("现任职务");
121             XWPFTableCell cell_3_1 = CreateCell(row_3);
122             SetColSpan(cell_3_1, 2);
123             cell_3_1.SetText("");
124             XWPFTableCell cell_3_2 = CreateCell(row_3);
125             cell_3_2.SetText("任现职时间");
126             XWPFTableCell cell_3_3 = CreateCell(row_3);
127             SetColSpan(cell_3_3, 2);
128             cell_3_3.SetText("");
129             XWPFTableCell cell_3_4 = CreateCell(row_3);
130             cell_3_4.SetText("典型类别");
131             XWPFTableCell cell_3_5 = CreateCell(row_3);
132             cell_3_5.SetText("");
133 
134 
135             XWPFTableRow row_4 = CreateRow(table);//第五行
136             XWPFTableCell cell_4_0 = CreateCell(row_4);
137             cell_4_0.SetText("职称");
138             XWPFTableCell cell_4_1 = CreateCell(row_4);
139             cell_4_1.SetText("");
140             XWPFTableCell cell_4_2 = CreateCell(row_4);
141             cell_4_2.SetText("任现职称时间");
142             XWPFTableCell cell_4_3 = CreateCell(row_4);
143             cell_4_3.SetText("");
144             XWPFTableCell cell_4_4 = CreateCell(row_4);
145             cell_4_4.SetText("职工状况");
146             XWPFTableCell cell_4_5 = CreateCell(row_4);
147             cell_4_5.SetText("");
148             XWPFTableCell cell_4_6 = CreateCell(row_4);
149             cell_4_6.SetText("是否干部");
150             XWPFTableCell cell_4_7 = CreateCell(row_4);
151             cell_4_7.SetText("");
152 
153             XWPFTableRow row_5 = CreateRow(table);//第六行
154             XWPFTableCell cell_5_0 = CreateCell(row_5);
155             cell_5_0.SetText("毕业院校及专业");
156             XWPFTableCell cell_5_1 = CreateCell(row_5);
157             SetColSpan(cell_5_1, 2);
158             cell_5_1.SetText("");
159             XWPFTableCell cell_5_2 = CreateCell(row_5);
160             cell_5_2.SetText("毕业时间");
161             XWPFTableCell cell_5_3 = CreateCell(row_5);
162             SetColSpan(cell_5_3, 2);
163             cell_5_3.SetText("");
164             XWPFTableCell cell_5_4 = CreateCell(row_5);
165             cell_5_4.SetText("学位");
166             XWPFTableCell cell_5_5 = CreateCell(row_5);
167             cell_5_5.SetText("");
168 
169             XWPFTableRow row_6 = CreateRow(table);//第七行
170             XWPFTableCell cell_6_0 = CreateCell(row_6);
171             cell_6_0.SetText("所获荣誉");
172             XWPFTableCell cell_6_1 = CreateCell(row_6);
173             SetColSpan(cell_6_1, 7);
174             cell_6_1.SetText("");
175 
176             XWPFTableRow row_7 = CreateRow(table);//第八行
177             XWPFTableCell cell_7_0 = CreateCell(row_7);
178             SetColSpan(cell_7_0, 8);
179 
180             XWPFParagraph aa = cell_7_0.AddParagraph();
181             aa.Alignment = ParagraphAlignment.CENTER;
182             XWPFRun aa_r = aa.CreateRun();
183             aa_r.FontSize = 18;
184             aa_r.SetTextPosition(20);
185             aa_r.SetText("个人简介");
186 
187 
188             XWPFParagraph bb = cell_7_0.AddParagraph();
189             bb.Alignment = ParagraphAlignment.CENTER;
190             XWPFRun bb_r = bb.CreateRun();
191             bb_r.SetText("123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,123123123123123123123123123123123123123123,");
192 
193 
194 
195 
196 
197 
198             #region 
199             //table.GetRow(0).GetCell(0).SetText("姓名");//第一行
200             //table.GetRow(0).GetCell(1).SetText("");
201             //table.GetRow(0).GetCell(2).SetText("性别");
202             //table.GetRow(0).GetCell(3).SetText("");
203             //table.GetRow(0).GetCell(4).SetText("民族");
204             //table.GetRow(0).GetCell(5).SetText("");
205             //table.GetRow(0).GetCell(6).SetText("出生年月");
206             //table.GetRow(0).GetCell(7).SetText("");
207 
208             //table.GetRow(1).GetCell(0).SetText("政治面貌");//第二行
209             //table.GetRow(1).GetCell(1).SetText("");
210             //table.GetRow(1).GetCell(2).SetText("籍贯");
211             //table.GetRow(1).GetCell(3).SetText("");
212             //table.GetRow(1).GetCell(4).SetText("学历");
213             //table.GetRow(1).GetCell(5).SetText("");
214             //table.GetRow(1).GetCell(6).SetText("参加工作时间");
215             //table.GetRow(1).GetCell(7).SetText("");
216 
217             //table.GetRow(2).GetCell(0).SetText("所在单位");//第三行
218             //table.GetRow(2).GetCell(1).SetText("");
219             //table.GetRow(2).GetCell(2).SetText("所属部门");
220             //table.GetRow(2).GetCell(3).SetText("");
221             //table.GetRow(2).GetCell(4).SetText("隶属系统");
222             //table.GetRow(2).GetCell(5).SetText("");
223 
224             //table.GetRow(3).GetCell(0).SetText("现任职务");//第四行
225             //table.GetRow(3).GetCell(1).SetText("");
226             //table.GetRow(3).GetCell(2).SetText("任现职时间");
227             //table.GetRow(3).GetCell(3).SetText("");
228             //table.GetRow(3).GetCell(4).SetText("典型类别");
229             //table.GetRow(3).GetCell(5).SetText("");
230 
231             //table.GetRow(4).GetCell(0).SetText("职称");//第五行
232             //table.GetRow(4).GetCell(1).SetText("");
233             //table.GetRow(4).GetCell(2).SetText("任现职称时间");
234             //table.GetRow(4).GetCell(3).SetText("");
235             //table.GetRow(4).GetCell(4).SetText("职工状况");
236             //table.GetRow(4).GetCell(5).SetText("");
237             //table.GetRow(4).GetCell(6).SetText("是否干部");
238             //table.GetRow(4).GetCell(7).SetText("");
239 
240             //table.GetRow(5).GetCell(0).SetText("毕业院校及专业");//第六行
241             //table.GetRow(5).GetCell(1).SetText("");
242             //table.GetRow(5).GetCell(2).SetText("毕业时间");
243             //table.GetRow(5).GetCell(3).SetText("");
244             //table.GetRow(5).GetCell(4).SetText("学位");
245             //table.GetRow(5).GetCell(5).SetText("");
246 
247             //table.GetRow(6).GetCell(0).SetText("所获荣誉");//第七行
248             //table.GetRow(6).GetCell(1).SetText("");
249 
250             //table.GetRow(7).GetCell(0).SetText("个人简介");//第八行
251             //table.GetRow(7).GetCell(1).SetText("");
252             #endregion
253 
254 
255             using (var fs = File.OpenWrite(@"c:/yc.net.doc"))
256             {
257                 doc.Write(fs);   //向打开的这个xls文件中写入mySheet表并保存。
258                 Console.WriteLine("生成成功");
259             }
260 
261 
262             //导出
263           //  DownloadByOutputStreamBlock(new MemoryStream(ToByte(doc)), "先进个人基本信息--" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".docx");
264         }
265 
266         /// <summary>
267         /// 创建行
268         /// </summary>
269         /// <param name="table"></param>
270         /// <returns></returns>
271         private XWPFTableRow CreateRow(XWPFTable table)
272         {
273             CT_Row m_NewRow = new CT_Row();
274             XWPFTableRow m_row = new XWPFTableRow(m_NewRow, table);
275             m_row.GetCTRow().AddNewTrPr().AddNewTrHeight().val = (ulong)426;
276             table.AddRow(m_row);
277 
278             return m_row;
279         }
280 
281         /// <summary>
282         /// 创建列
283         /// </summary>
284         /// <param name="row"></param>
285         /// <returns></returns>
286         private XWPFTableCell CreateCell(XWPFTableRow row)
287         {
288             XWPFTableCell cell = row.CreateCell();
289             CT_Tc cttc = cell.GetCTTc();
290             CT_TcPr ctpr = cttc.AddNewTcPr();
291 
292             cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
293 
294             ctpr.AddNewVAlign().val = ST_VerticalJc.center;//垂直居中
295 
296             ctpr.tcW = new CT_TblWidth();
297             ctpr.tcW.w = "1200";//默认列宽
298             ctpr.tcW.type = ST_TblWidth.dxa;
299 
300             return cell;
301         }
302 
303         /// <summary>
304         /// 合并单元格
305         /// </summary>
306         /// <param name="cell"></param>
307         /// <param name="Span"></param>
308         private void SetColSpan(XWPFTableCell cell, int Span)
309         {
310             CT_Tc cttc = cell.GetCTTc();
311             CT_TcPr ctpr = cttc.AddNewTcPr();
312             ctpr.gridSpan = new CT_DecimalNumber();
313             ctpr.gridSpan.val = Span.ToString();//合并单元格
314 
315             cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;//水平居中
316 
317             ctpr.AddNewVAlign().val = ST_VerticalJc.center;//垂直居中
318         }
319 
320         /// <summary>
321         /// 设置列宽
322         /// </summary>
323         /// <param name="table">表格</param>
324         /// <param name="ColIndex">列号。从0开始编号</param>
325         /// <param name="Width">列宽</param>
326         private void SetColWith(XWPFTable table, int ColIndex, int Width)
327         {
328             CT_TcPr m_pr = table.GetRow(0).GetCell(ColIndex).GetCTTc().AddNewTcPr();
329             m_pr.tcW = new CT_TblWidth();
330             m_pr.tcW.w = Width.ToString();
331             m_pr.tcW.type = ST_TblWidth.dxa;
332         }
333 
334         /// <summary>
335         /// 导出文件
336         /// </summary>
337         /// <param name="stream"></param>
338         /// <param name="fileName">导出文件名</param>
339         public void DownloadByOutputStreamBlock(System.IO.Stream stream, string fileName)
340         {
341             using (stream)
342             {
343                 //将流的位置设置到开始位置。
344                 stream.Position = 0;
345                 //块大小
346                 long ChunkSize = 102400;
347                 //建立100k的缓冲区
348                 byte[] buffer = new byte[ChunkSize];
349                 //已读字节数
350                 long dataLengthToRead = stream.Length;
351 
352                 //Response.ContentType = "application/octet-stream";
353                 //Response.AddHeader("Content-Disposition",
354                 //    string.Format("attachment; filename={0}", HttpUtility.UrlPathEncode(fileName)));
355 
356                 //while (dataLengthToRead > 0 && Response.IsClientConnected)
357                 //{
358                 //    int lengthRead = stream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
359                 //    Response.OutputStream.Write(buffer, 0, lengthRead);
360                 //    Response.Flush();
361                 //    Response.Clear();
362                 //    dataLengthToRead -= lengthRead;
363                 //}
364                 //Response.Close();
365             }
366         }
367 
368         private byte[] ToByte(XWPFDocument wb)
369         {
370             using (MemoryStream ms = new MemoryStream())
371             {
372                 //XSSFWorkbook即读取.xlsx文件返回的MemoryStream是关闭
373                 //但是可以ToArray(),这是NPOI的bug
374                 wb.Write(ms);
375                 return ms.ToArray();
376             }
377         }
378     }
379 }
View Code
posted @ 2017-06-28 10:51  Douren  阅读(243)  评论(0)    收藏  举报