本篇文章补充讲解上篇文章中word模板的制作。
① 新建一个word文档
② 定位到要插入书签的位置
③ 菜单栏 “插入” -> “书签”,输入书签名,点击“添加”
可以多处位置使用同样的书签名。
④ 保存模板文件,后缀名dotx
using System;
using System.Collections.Generic;
using System.Text;
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;
using System.Data;namespace ExportTest
{
/// <summary>
/// 导出word
/// </summary>
public class ExportWord
{
/// <summary>
/// 将数据表导出到word
/// </summary>
/// <param name="dt">数据表</param>
/// <param name="isShowWord">是否显示word</param>
/// <param name="fileName">导出到文件名</param>
/// <param name="picName">导出到word中图片名</param>
/// <returns></returns>
public static bool ExportToWord(DataTable dt, bool isShowWord, object fileName, string picName)
{
if (System.IO.File.Exists(fileName.ToString()))
{
System.IO.File.Delete(fileName.ToString());
}
bool result = true;Object myobj = Missing.Value; ;
if (dt == null || dt.Rows.Count == 0)
{
result = false;
}
else
{
//建立Word应用
Word.Application word = new Word.Application();//word文档
Word.Document mydoc = new Word.Document();
mydoc = word.Documents.Add(ref myobj, ref myobj, ref myobj, ref myobj);
word.Visible = isShowWord;
mydoc.Select();Word.Selection mysel = word.Selection;
//mysel.InlineShapes.AddPicture(picName, ref myobj, ref myobj, ref myobj);
object top = 100;
object left = 300;
object hw = 100;//将数据生成Word表格文件
Word.Table mytable = mydoc.Tables.Add(mysel.Range, dt.Rows.Count, dt.Columns.Count, ref myobj, ref myobj);//设置列宽
mytable.Columns.SetWidth(50, Word.WdRulerStyle.wdAdjustNone);//输出列标题数据
for (int i = 0; i < dt.Columns.Count; i++)
{
mytable.Cell(1, i + 1).Range.InsertAfter(dt.Columns[i].ColumnName);
}
//输出控件中的记录
for (int i = 0; i < dt.Rows.Count - 1; i++)
{
for (int j = 0; j < dt.Columns.Count; j++)
{
mytable.Cell(i + 2, j + 1).Range.InsertAfter(dt.Rows[i][j].ToString());
}
}}
}
}
本篇文章补充讲解上篇文章中word模板的制作。
① 新建一个word文档
② 定位到要插入书签的位置
③ 菜单栏 “插入” -> “书签”,输入书签名,点击“添加”
可以多处位置使用同样的书签名。
④ 保存模板文件,后缀名dotx
转载于:https://www.cnblogs.com/AimeeMeng/p/9225555.html
WinForm导出文件为Word、Excel、文本文件的方法
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Windows.Forms; 6 using System.Threading; 7 using Microsoft.Office.Interop.Word; 8 using System.IO; 9 using Microsoft.Office.Interop.Excel; 10 using Sun.Winform.Util; 11 12 namespace Sun.Winform.Files 13 { 14 /// <summary> 15 /// 将内容导出为文件类。 16 /// </summary> 17 /// <remarks> 18 /// 19 /// 20 /// </remarks> 21 public class ExportFile 22 { 23 /// <summary> 24 /// 将字符串存储为word文档格式的文件的方法(多线程)。 25 /// </summary> 26 /// <param name="strText">要保存的字符串内容。</param> 27 public static void SaveAsWord(string p_str) 28 { 29 Thread thread = new Thread(SaveAsWordFile); 30 thread.SetApartmentState(ApartmentState.STA); 31 thread.Start(p_str); 32 } 33 /// <summary> 34 /// 将字符串存储为txt格式的文件的方法(多线程)。 35 /// </summary> 36 /// <param name="p_str"></param> 37 public static void SaveAsTxt(string p_str) 38 { 39 Thread thread = new Thread(SaveAsTxtFile); 40 thread.SetApartmentState(ApartmentState.STA); 41 thread.Start(p_str); 42 } 43 /// <summary> 44 /// 导出数据表数据到Excel(多线程)。 45 /// </summary> 46 public static void SaveAsExcel(System.Data.DataTable dataTable) 47 { 48 if (dataTable == null) 49 { 50 MessageUtil.ShowError("请先指定要导出的数据表"); 51 return; 52 } 53 Thread thread = new Thread(SaveAsExcelTableFile); 54 thread.SetApartmentState(ApartmentState.STA); 55 thread.Start(dataTable); 56 } 57 /// <summary> 58 /// 导出数据集数据到Excel(多线程)。 59 /// </summary> 60 public static void SaveAsExcel(System.Data.DataSet dataSet) 61 { 62 if (dataSet == null) 63 { 64 MessageUtil.ShowError("请先指定要导出的数据集"); 65 return; 66 } 67 Thread thread = new Thread(SaveAsExcelSetFile); 68 thread.SetApartmentState(ApartmentState.STA); 69 thread.Start(dataSet); 70 } 71 /// <summary> 72 /// 将字符串存储为word文档格式的文件。 73 /// </summary> 74 /// <param name="strtext">要保存的字符串内容。</param> 75 private static void SaveAsWordFile(object strtext) 76 { 77 SaveFileDialog sfd = new SaveFileDialog(); 78 sfd.Title = "请选择文件存放路径"; 79 sfd.FileName = "导出数据"; 80 sfd.Filter = "Word文档(*.doc)|*.doc"; 81 if (sfd.ShowDialog() != DialogResult.OK) 82 { 83 return; 84 } 85 string FileName = sfd.FileName.ToLower(); 86 if (!FileName.Contains(".doc")) 87 { 88 FileName += ".doc"; 89 } 90 if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5) 91 { 92 MessageUtil.ShowThreadMessage("文件保存失败,文件名不能为空!"); 93 return; 94 } 95 try 96 { 97 DateTime start = DateTime.Now; 98 MessageUtil.ShowThreadMessage("正在保存文件,请稍候..."); 99 Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass(); 100 Microsoft.Office.Interop.Word._Document doc; 101 object nothing = System.Reflection.Missing.Value; 102 doc = word.Documents.Add(ref nothing, ref nothing, ref nothing, ref nothing); 103 doc.Paragraphs.Last.Range.Text = strtext.ToString(); 104 object myfileName = FileName; 105 //将WordDoc文档对象的内容保存为doc文档 106 doc.SaveAs(ref myfileName, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing, ref nothing); 107 //关闭WordDoc文档对象 108 doc.Close(ref nothing, ref nothing, ref nothing); 109 //关闭WordApp组件对象 110 word.Quit(ref nothing, ref nothing, ref nothing); 111 GC.Collect(); 112 DateTime end = DateTime.Now; 113 TimeSpan ts = end - start; 114 MessageUtil.ShowMessage("文件保存成功,用时" + ts.ToString()); 115 } 116 catch (System.Exception ex) 117 { 118 MessageUtil.ShowError(ex.Message); 119 } 120 } 121 /// <summary> 122 /// 将字符串存储为txt文档格式的文件。 123 /// </summary> 124 /// <param name="strtext">要保存的字符串内容。</param> 125 private static void SaveAsTxtFile(object strtext) 126 { 127 SaveFileDialog sfd = new SaveFileDialog(); 128 sfd.Title = "请选择文件存放路径"; 129 sfd.FileName = "导出数据"; 130 sfd.Filter = "文本文档(*.txt)|*.txt"; 131 if (sfd.ShowDialog() != DialogResult.OK) 132 { 133 return; 134 } 135 string FileName = sfd.FileName.ToLower(); 136 if (!FileName.Contains(".txt")) 137 { 138 FileName += ".txt"; 139 } 140 if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5) 141 { 142 MessageUtil.ShowThreadMessage("文件保存失败,文件名不能为空!"); 143 return; 144 } 145 try 146 { 147 DateTime start = DateTime.Now; 148 StreamWriter sw = new StreamWriter(FileName, false); 149 sw.Write(strtext.ToString()); 150 sw.Flush(); 151 sw.Close(); 152 DateTime end = DateTime.Now; 153 TimeSpan ts = end - start; 154 MessageUtil.ShowMessage("文件保存成功,用时" + ts.ToString()); 155 } 156 catch (Exception ex) 157 { 158 MessageUtil.ShowError(ex.Message); 159 } 160 } 161 /// <summary> 162 /// 将数据存储为Excel文件。 163 /// </summary> 164 /// <param name="p_dt">要保存的数据表。</param> 165 private static void SaveAsExcelTableFile(object p_dt) 166 { 167 System.Data.DataTable dt = (System.Data.DataTable)p_dt; 168 if (dt.Rows.Count == 0) 169 { 170 MessageUtil.ShowError("没有可保存的数据"); 171 return; 172 } 173 SaveFileDialog sfd = new SaveFileDialog(); 174 sfd.Title = "请选择文件存放路径"; 175 sfd.FileName = "导出数据"; 176 sfd.Filter = "Excel文档(*.xls)|*.xls"; 177 if (sfd.ShowDialog() != DialogResult.OK) 178 { 179 return; 180 } 181 string FileName = sfd.FileName.ToLower(); 182 if (!FileName.Contains(".xls")) 183 { 184 FileName += ".xls"; 185 } 186 if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5) 187 { 188 MessageUtil.ShowThreadMessage("文件保存失败,文件名不能为空!"); 189 return; 190 } 191 if (sfd.FileName != "") 192 { 193 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 194 if (excelApp == null) 195 { 196 MessageBox.Show("无法创建Excel对象,可能您的机器未安装Excel"); 197 return; 198 } 199 else 200 { 201 MessageUtil.ShowThreadMessage("正在导出数据,请稍候..."); 202 DateTime start = DateTime.Now; 203 Microsoft.Office.Interop.Excel.Workbooks workbooks = excelApp.Workbooks; 204 Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); 205 Microsoft.Office.Interop.Excel.Worksheet worksheet = (Worksheet)workbook.Worksheets[1]; 206 207 for (int col = 1; col <= dt.Columns.Count; col++) 208 { 209 worksheet.Cells[1, col] = dt.Columns[col - 1].Caption.ToString(); 210 } 211 for (int i = 0; i < dt.Rows.Count; i++) 212 { 213 for (int j = 0; j < dt.Columns.Count; j++) 214 { 215 worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString(); 216 } 217 } 218 workbook.Saved = true; 219 workbook.SaveCopyAs(sfd.FileName); 220 //释放资源 221 System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); 222 worksheet = null; 223 System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); 224 workbook = null; 225 workbooks.Close(); 226 System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks); 227 workbooks = null; 228 excelApp.Quit(); 229 System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); 230 excelApp = null; 231 //使用垃圾回收可以关闭EXCEL.EXE进程 232 GC.Collect(); 233 DateTime end = DateTime.Now; 234 int iTimeSpan = (end.Minute - start.Minute) * 60 + (end.Second - start.Second); 235 MessageUtil.ShowMessage("数据导出完毕,用时" + iTimeSpan.ToString() + "秒"); 236 } 237 } 238 } 239 /// <summary> 240 /// 将数据集存储为Excel文件。 241 /// </summary> 242 /// <param name="p_ds">要导出的数据集。</param> 243 private static void SaveAsExcelSetFile(object p_ds) 244 { 245 System.Data.DataSet ds = (System.Data.DataSet)p_ds; 246 if (ds == null || ds.Tables.Count == 0) 247 { 248 MessageUtil.ShowError("没有可保存的数据"); 249 return; 250 } 251 SaveFileDialog sfd = new SaveFileDialog(); 252 sfd.Title = "请选择文件存放路径"; 253 sfd.FileName = "导出数据"; 254 sfd.Filter = "Excel文档(*.xls)|*.xls"; 255 if (sfd.ShowDialog() != DialogResult.OK) 256 { 257 return; 258 } 259 string FileName = sfd.FileName.ToLower(); 260 if (!FileName.Contains(".xls")) 261 { 262 FileName += ".xls"; 263 } 264 if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5) 265 { 266 MessageUtil.ShowThreadMessage("文件保存失败,文件名不能为空!"); 267 return; 268 } 269 if (sfd.FileName != "") 270 { 271 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 272 if (excelApp == null) 273 { 274 MessageBox.Show("无法创建Excel对象,可能您的机器未安装Excel"); 275 return; 276 } 277 else 278 { 279 MessageUtil.ShowThreadMessage("正在导出数据,请稍候..."); 280 DateTime start = DateTime.Now; 281 Microsoft.Office.Interop.Excel.Workbooks workbooks = excelApp.Workbooks; 282 Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); 283 Microsoft.Office.Interop.Excel.Worksheet worksheet = null; 284 object objMissing = System.Reflection.Missing.Value; 285 for (int m = 0; m < ds.Tables.Count; m++) 286 { 287 System.Data.DataTable dt = ds.Tables[m]; 288 worksheet = (Worksheet)workbook.ActiveSheet; 289 worksheet.Name = dt.TableName; 290 for (int col = 1; col <= dt.Columns.Count; col++) 291 { 292 worksheet.Cells[1, col] = dt.Columns[col - 1].Caption.ToString(); 293 } 294 for (int i = 1; i <= dt.Rows.Count; i++) 295 { 296 for (int j = 1; j <= dt.Columns.Count; j++) 297 { 298 worksheet.Cells[i + 1, j] = dt.Rows[i - 1][j - 1].ToString(); 299 } 300 } 301 if (m < ds.Tables.Count - 1) 302 { 303 workbook.Sheets.Add(objMissing, objMissing, 1, XlSheetType.xlWorksheet); 304 } 305 } 306 workbook.Saved = true; 307 workbook.SaveCopyAs(sfd.FileName); 308 //释放资源 309 System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); 310 worksheet = null; 311 System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); 312 workbook = null; 313 workbooks.Close(); 314 System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks); 315 workbooks = null; 316 excelApp.Quit(); 317 System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); 318 excelApp = null; 319 GC.Collect(); 320 DateTime end = DateTime.Now; 321 int iTimeSapn = (end.Minute - start.Minute) * 60 + (end.Second - start.Second); 322 MessageUtil.ShowMessage("数据导出完毕,用时" + (iTimeSapn / 60).ToString() + "分" + (iTimeSapn % 60).ToString() + "秒"); 323 } 324 } 325 } 326 } 327 }
转载于:https://www.cnblogs.com/newlore/p/9155029.html
1 string FileURL = Server.MapPath("Send\\") + Request.Cookies["Bill_name"].Value + DateTime.Now.ToShortDateString()+".doc";//为将创建的文件设置路径,创建文件(路径+文件名)
2 if (File.Exists(FileURL)) System.IO.File.Delete(FileURL); // 判断文件名是否已存在
3 Object Nothing = System.Reflection.Missing.Value;
4 object filename = FileURL; //文件保存路径
5 //创建Word文档
6 Application WordApp = new ApplicationClass();
7 Document WordDoc = WordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing);
8 WordApp.Selection.ParagraphFormat.LineSpacing = 5f;//设置文档的行间距
9
10 //移动焦点并换行
11 object count = 14;
12 object WdLine = WdUnits.wdLine;//换一行;
13 WordApp.Selection.MoveDown(ref WdLine, ref count, ref Nothing);//移动焦点
14 WordApp.Selection.TypeParagraph();//插入段落
15
16 WordDoc.Paragraphs.First.Range.Text = mailBody.Replace(" "," ");
17 XmlDataDocument doc = new XmlDataDocument();
18 doc.LoadXml(xml);
19
20 //文档中创建表格
21 Microsoft.Office.Interop.Word.Table newTable = WordDoc.Tables.Add(WordApp.Selection.Range,doc.ChildNodes[0].ChildNodes.Count+1,10, refNothing, ref Nothing);
22 //设置表格样式
23 newTable.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleDouble;
24 newTable.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;
25 newTable.Columns[1].Width = 60f;
26 newTable.Columns[2].Width = 35f;
27 newTable.Columns[3].Width = 55f;
28 newTable.Columns[4].Width = 55f;
29 newTable.Columns[5].Width = 35f;
30 newTable.Columns[6].Width = 35f;
31 newTable.Columns[7].Width = 55f;
32 newTable.Columns[8].Width = 35f;
33 newTable.Columns[9].Width = 55f;
34 newTable.Columns[10].Width = 35f;
35 try
36 {
37 int rowIndex = 1, columnIndex = 1;
38 XmlNode root = doc.FirstChild.FirstChild;
39 foreach (XmlNode xn in root.ChildNodes)
40 {
41 newTable.Cell(rowIndex, columnIndex).Range.Text = xn.Name;
42 if (columnIndex < 10)
43 columnIndex++;
44 }
45 rowIndex++;
46 foreach (XmlNode xn2 in doc.FirstChild.ChildNodes)
47 {
48 columnIndex = 1;
49 foreach (XmlNode xn in xn2.ChildNodes)
50 {
51 newTable.Cell(rowIndex, columnIndex).Range.Text = xn.InnerText;
52 //newTable.Cell(rowIndex, columnIndex).Select();
53 //WordApp.Selection.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;
54 if (columnIndex < 10)
55 columnIndex++;
56 }
57 if (rowIndex <= doc.ChildNodes[0].ChildNodes.Count)
58 rowIndex++;
59 }
60 //文件保存
61 WordDoc.SaveAs(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing,ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);
62
63 }
64 catch
65 {
66 GridCheckList.AddScript(clsSystem.fGetExtMsgAlert("系统提示", "导出失败!"));
67 }
68 finally
69 {
70 WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
71 WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
72 }
转载地址:http://www.cnblogs.com/lingyuan/archive/2011/01/24/1943440.html