WinForm导出文件为Word、Excel、文本文件的方法
更新时间:2020年6月25日 11:32 点击:1592
好久没有写文章了,下面把自己最近程序中用到的一个小小的导出文件的方法给在家分享一下,欢迎大家来排砖,谢谢~不说废话了,直接上代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; using Microsoft.Office.Interop.Word; using System.IO; using Microsoft.Office.Interop.Excel; using Sun.Winform.Util; namespace Sun.Winform.Files { /// <summary> /// 将内容导出为文件类。 /// </summary> /// <remarks> /// 作者:SunYujing /// 日期:2011-12-18 /// </remarks> public class ExportFile { /// <summary> /// 将字符串存储为word文档格式的文件的方法(多线程)。 /// </summary> /// <param name="strText">要保存的字符串内容。</param> public static void SaveAsWord(string p_str) { Thread thread = new Thread(SaveAsWordFile); thread.SetApartmentState(ApartmentState.STA); thread.Start(p_str); } /// <summary> /// 将字符串存储为txt格式的文件的方法(多线程)。 /// </summary> /// <param name="p_str"></param> public static void SaveAsTxt(string p_str) { Thread thread = new Thread(SaveAsTxtFile); thread.SetApartmentState(ApartmentState.STA); thread.Start(p_str); } /// <summary> /// 导出数据表数据到Excel(多线程)。 /// </summary> public static void SaveAsExcel(System.Data.DataTable dataTable) { if (dataTable == null) { MessageUtil.ShowError("请先指定要导出的数据表"); return; } Thread thread = new Thread(SaveAsExcelTableFile); thread.SetApartmentState(ApartmentState.STA); thread.Start(dataTable); } /// <summary> /// 导出数据集数据到Excel(多线程)。 /// </summary> public static void SaveAsExcel(System.Data.DataSet dataSet) { if (dataSet == null) { MessageUtil.ShowError("请先指定要导出的数据集"); return; } Thread thread = new Thread(SaveAsExcelSetFile); thread.SetApartmentState(ApartmentState.STA); thread.Start(dataSet); } /// <summary> /// 将字符串存储为word文档格式的文件。 /// </summary> /// <param name="strtext">要保存的字符串内容。</param> private static void SaveAsWordFile(object strtext) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "请选择文件存放路径"; sfd.FileName = "导出数据"; sfd.Filter = "Word文档(*.doc)|*.doc"; if (sfd.ShowDialog() != DialogResult.OK) { return; } string FileName = sfd.FileName.ToLower(); if (!FileName.Contains(".doc")) { FileName += ".doc"; } if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5) { MessageUtil.ShowThreadMessage("文件保存失败,文件名不能为空!"); return; } try { DateTime start = DateTime.Now; MessageUtil.ShowThreadMessage("正在保存文件,请稍候..."); Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass(); Microsoft.Office.Interop.Word._Document doc; object nothing = System.Reflection.Missing.Value; doc = word.Documents.Add(ref nothing, ref nothing, ref nothing, ref nothing); doc.Paragraphs.Last.Range.Text = strtext.ToString(); object myfileName = FileName; //将WordDoc文档对象的内容保存为doc文档 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); //关闭WordDoc文档对象 doc.Close(ref nothing, ref nothing, ref nothing); //关闭WordApp组件对象 word.Quit(ref nothing, ref nothing, ref nothing); GC.Collect(); DateTime end = DateTime.Now; TimeSpan ts = end - start; MessageUtil.ShowMessage("文件保存成功,用时" + ts.ToString()); } catch (System.Exception ex) { MessageUtil.ShowError(ex.Message); } } /// <summary> /// 将字符串存储为txt文档格式的文件。 /// </summary> /// <param name="strtext">要保存的字符串内容。</param> private static void SaveAsTxtFile(object strtext) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "请选择文件存放路径"; sfd.FileName = "导出数据"; sfd.Filter = "文本文档(*.txt)|*.txt"; if (sfd.ShowDialog() != DialogResult.OK) { return; } string FileName = sfd.FileName.ToLower(); if (!FileName.Contains(".txt")) { FileName += ".txt"; } if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5) { MessageUtil.ShowThreadMessage("文件保存失败,文件名不能为空!"); return; } try { DateTime start = DateTime.Now; StreamWriter sw = new StreamWriter(FileName, false); sw.Write(strtext.ToString()); sw.Flush(); sw.Close(); DateTime end = DateTime.Now; TimeSpan ts = end - start; MessageUtil.ShowMessage("文件保存成功,用时" + ts.ToString()); } catch (Exception ex) { MessageUtil.ShowError(ex.Message); } } /// <summary> /// 将数据存储为Excel文件。 /// </summary> /// <param name="p_dt">要保存的数据表。</param> private static void SaveAsExcelTableFile(object p_dt) { System.Data.DataTable dt = (System.Data.DataTable)p_dt; if (dt.Rows.Count == 0) { MessageUtil.ShowError("没有可保存的数据"); return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "请选择文件存放路径"; sfd.FileName = "导出数据"; sfd.Filter = "Excel文档(*.xls)|*.xls"; if (sfd.ShowDialog() != DialogResult.OK) { return; } string FileName = sfd.FileName.ToLower(); if (!FileName.Contains(".xls")) { FileName += ".xls"; } if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5) { MessageUtil.ShowThreadMessage("文件保存失败,文件名不能为空!"); return; } if (sfd.FileName != "") { Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); if (excelApp == null) { MessageBox.Show("无法创建Excel对象,可能您的机器未安装Excel"); return; } else { MessageUtil.ShowThreadMessage("正在导出数据,请稍候..."); DateTime start = DateTime.Now; Microsoft.Office.Interop.Excel.Workbooks workbooks = excelApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); Microsoft.Office.Interop.Excel.Worksheet worksheet = (Worksheet)workbook.Worksheets[1]; for (int col = 1; col <= dt.Columns.Count; col++) { worksheet.Cells[1, col] = dt.Columns[col - 1].Caption.ToString(); } for (int i = 0; i < dt.Rows.Count; i++) { for (int j = 0; j < dt.Columns.Count; j++) { worksheet.Cells[i + 2, j + 1] = dt.Rows[i][j].ToString(); } } workbook.Saved = true; workbook.SaveCopyAs(sfd.FileName); //释放资源 System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); worksheet = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); workbook = null; workbooks.Close(); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks); workbooks = null; excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); excelApp = null; //使用垃圾回收可以关闭EXCEL.EXE进程 GC.Collect(); DateTime end = DateTime.Now; int iTimeSpan = (end.Minute - start.Minute) * 60 + (end.Second - start.Second); MessageUtil.ShowMessage("数据导出完毕,用时" + iTimeSpan.ToString() + "秒"); } } } /// <summary> /// 将数据集存储为Excel文件。 /// </summary> /// <param name="p_ds">要导出的数据集。</param> private static void SaveAsExcelSetFile(object p_ds) { System.Data.DataSet ds = (System.Data.DataSet)p_ds; if (ds == null || ds.Tables.Count == 0) { MessageUtil.ShowError("没有可保存的数据"); return; } SaveFileDialog sfd = new SaveFileDialog(); sfd.Title = "请选择文件存放路径"; sfd.FileName = "导出数据"; sfd.Filter = "Excel文档(*.xls)|*.xls"; if (sfd.ShowDialog() != DialogResult.OK) { return; } string FileName = sfd.FileName.ToLower(); if (!FileName.Contains(".xls")) { FileName += ".xls"; } if (FileName.Substring(FileName.LastIndexOf(Path.DirectorySeparatorChar)).Length <= 5) { MessageUtil.ShowThreadMessage("文件保存失败,文件名不能为空!"); return; } if (sfd.FileName != "") { Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); if (excelApp == null) { MessageBox.Show("无法创建Excel对象,可能您的机器未安装Excel"); return; } else { MessageUtil.ShowThreadMessage("正在导出数据,请稍候..."); DateTime start = DateTime.Now; Microsoft.Office.Interop.Excel.Workbooks workbooks = excelApp.Workbooks; Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); Microsoft.Office.Interop.Excel.Worksheet worksheet = null; object objMissing = System.Reflection.Missing.Value; for (int m = 0; m < ds.Tables.Count; m++) { System.Data.DataTable dt = ds.Tables[m]; worksheet = (Worksheet)workbook.ActiveSheet; worksheet.Name = dt.TableName; for (int col = 1; col <= dt.Columns.Count; col++) { worksheet.Cells[1, col] = dt.Columns[col - 1].Caption.ToString(); } for (int i = 1; i <= dt.Rows.Count; i++) { for (int j = 1; j <= dt.Columns.Count; j++) { worksheet.Cells[i + 1, j] = dt.Rows[i - 1][j - 1].ToString(); } } if (m < ds.Tables.Count - 1) { workbook.Sheets.Add(objMissing, objMissing, 1, XlSheetType.xlWorksheet); } } workbook.Saved = true; workbook.SaveCopyAs(sfd.FileName); //释放资源 System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); worksheet = null; System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); workbook = null; workbooks.Close(); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbooks); workbooks = null; excelApp.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp); excelApp = null; GC.Collect(); DateTime end = DateTime.Now; int iTimeSapn = (end.Minute - start.Minute) * 60 + (end.Second - start.Second); MessageUtil.ShowMessage("数据导出完毕,用时" + (iTimeSapn / 60).ToString() + "分" + (iTimeSapn % 60).ToString() + "秒"); } } } } }
上一篇: 在Unity中实现简单的伪时间同步
下一篇: C#处理Json字符串实例分析
相关文章
- 这篇文章主要为大家详细介绍了SpringBoot实现excel文件生成和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-09
- 本篇文章是对C#中WinForm控件之Dock顺序调整进行了详细的分析介绍,需要的朋友参考下...2020-06-25
- 这篇文章主要介绍了c#读取excel方法,实例分析了C#读取excel文件的原理与相关技巧,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了Python导入数值型Excel数据并生成矩阵操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-09
- 这篇文章主要介绍了C# Winform中实现主窗口打开登录窗口关闭的方法,这在需要用户名密码的软件项目中是必用的一个技巧,要的朋友可以参考下...2020-06-25
- 下面小编就为大家带来一篇C# winform打开Excel文档的方法总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 这篇文章主要给大家介绍C# winform快捷键设置技巧,涉及到C winform快捷键相关知识,对C winform知识感兴趣的朋友可以参考下本篇文章...2020-06-25
- C# 导出 Excel 的6种简单方法:数据表导出到 Excel,对象集合导出到 Excel,数据库导出到 Excel,微软网格控件导出到 Excel,数组导出到 Excel,CSV 导出到 Excel,你都会了吗?需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
c#中Winform实现多线程异步更新UI(进度及状态信息)
本篇文章主要介绍了c#中Winform实现多线程异步更新UI(进度及状态信息) ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25C#实现Excel表数据导入Sql Server数据库中的方法
这篇文章主要介绍了C#实现Excel表数据导入Sql Server数据库中的方法,结合实例形式详细分析了C#读取Excel表数据及导入Sql Server数据库的具体操作步骤与相关操作技巧,需要的朋友可以参考下...2020-06-25- 这篇文章主要给大家介绍了关于c# winform异步不卡界面的实现方法,文中通过示例代码介绍的非常详细,对大家学习或者使用c#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法
这篇文章主要介绍了C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法,本文通过Application.DoEvents()解决这个问题,并讲解了Application.DoEvents()的作用,需要的朋友可以参考下...2020-06-25- 这篇文章主要介绍了C#中winform使用相对路径读取文件的方法,实例分析了C#使用相对路径读取文件的技巧与实际应用,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C#获取Word文档中所有表格的实现代码分享,小编亲测可用,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C#实现将数据导出到word或者Excel中的方法,涉及C#操作word及Excel格式文件的方法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了C#使用Ado.Net更新和添加数据到Excel表格的方法,较为详细的分析了OLEDB的原理与使用技巧,可实现较为方便的操作Excel数据,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了C#使用Aspose.Cells创建和读取Excel文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了C#使用oledb导出数据到excel的方法,结合实例形式分析了C#操作oledb导出数据的相关技巧与注意事项,需要的朋友可以参考下...2020-06-25
C#将Word转换成PDF方法汇总(基于Office和WPS)
这篇文章主要汇总了C#将Word转换成PDF方法,基于Office和WPS的两种解决方案,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25- 本篇文章是对使用c#在word文档中创建表格的方法进行了详细的分析介绍,需要的朋友参考下...2020-06-25