WinForm导出文件
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 /// 作者:SunYujing
19 /// 日期:2011-12-18
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 }
WinForm导出文件的更多相关文章
- winform导入导出excel,后台动态添加控件
思路: 导入: 1,初始化一个OpenFileDialog类 (OpenFileDialog fileDialog = new OpenFileDialog();) 2, 获取用户选择文件的后缀名(s ...
- C# Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面
个人理解,开发应用程序的目的,不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景也最为复杂,包括但不限于:表格记录查询.报表查询.导出文件查询等等 ...
- Winform 通过FlowLayoutPanel及自定义的编辑控件,实现快速构建C/S版的编辑表单页面 z
http://www.cnblogs.com/zuowj/p/4504130.html 不论是B/S或是C/S结构类型,无非就是实现可供用户进行查.增.改.删,其中查询用到最多,开发设计的场景 也最为 ...
- C# winform 导出导入Excel/Doc 完整实例教程[网上看到的]
还真没做过winform的导出导入,今天上网百度了一下.结果--- 所以还是我自己写个吧.之前做过web的,半搬半做就OK. 1添加引用:Aspose.Cells.dll(我们就叫工具包吧,可以从网上 ...
- Winform开发的应用环境和相关技术介绍
随着时间的推移,Winform也算是能够坚持下来最久的技术之一了,它的昔日辉煌和现今的依旧活跃,导致了它依旧拥有者很庞大的用户群体,虽然目前很多技术日新月异的,曾经的ASP.ASP.NET WebFo ...
- C#+Aspose.Cells 导出Excel及设置样式 (Webform/Winform)
在项目中用到,特此记录下来,Aspose.Cells 不依赖机器装没有装EXCEL都可以导出,很方便.具体可以参考其他 http://www.aspose.com/docs/display/cells ...
- Oracle 11g导出来的dmp导入到 10g的数据库(IMP-00010:不是有效的导出文件,头部验证失败)
原文地址:http://www.cnblogs.com/alxc/archive/2011/03/25/1995279.html 因为喜欢新的东西,所以基本上电脑的开发工具都是最新的,oracle也装 ...
- Winform入门见解
winform算是C#比较快速的入门的一个了,简单的控件拖拽然后写上每个控件对应的事件.然后就可以了.需要美观的点 可以用Skin皮肤就完成了.我们先不说复杂的,就来个普通的三层架构来增删改查 分页和 ...
- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
前面介绍了很多ABP系列的文章,一步一步的把我们日常开发中涉及到的Web API服务构建.登录日志和操作审计日志.字典管理模块.省份城市的信息维护.权限管理模块中的组织机构.用户.角色.权限.菜单等内 ...
随机推荐
- 闪回drop恢复表后sql运行计划异常
-----正常运行计划 set autotrace traceonly set linesize 1000 select /*+index(t idx_object_id)*/ * from t wh ...
- angular之Http服务
原文 https://www.jianshu.com/p/53e4a4bfad7d 大纲 1.什么是angular服务 2.服务的类别 3.认识angular的Http请求 4.简单实例 5.angu ...
- Hadoop1.2.1伪分布模式安装指南 分类: A1_HADOOP 2014-08-17 10:52 1346人阅读 评论(0) 收藏
一.前置条件 1.操作系统准备 (1)Linux可以用作开发平台及产品平台. (2)win32只可用作开发平台,且需要cygwin的支持. 2.安装jdk 1.6或以上 3.安装ssh,并配置免密码登 ...
- Android百日程序:GridView实现相冊效果
本章使用GridView控件来做一个相冊效果. 图片效果例如以下: 响应点击事件,点击的时候提示是当前第几章图片.从左到右,从上到下. 点击了第一张图片,显示了1. 步骤: 一 新建项目,然后把图片资 ...
- Android 开发--CMakeList调用本地so文件
这里写代码片Android开发常常遇到Java调用so文件的情况,本文介绍一下Google最近新推出的应用在android studio中的方法–cmakelist.txt格式调用. so文件分为jn ...
- Android addTextChangedListener(文本监听)参数解释及实现EditText字数监听
由于最近做项目要检测EditText中输入的字数长度,从而接触到了Android中EditText的监听接口,TextWatcher.它有三个成员方法,第一个after很简单,这个方法就是在EditT ...
- C++网络编程方面的开源项目
Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力. ...
- [Angular] @ContentChildren and QueryList
We have looked at @ContentChild in article(http://www.cnblogs.com/Answer1215/p/6414657.html). Now le ...
- [转]erlang ranch
一. ranch app启动: ranch_sup -> ranch_server % 创建ets, 并提供接口给其他进程读写 二. 启动diy app (监听模块: 用ranch_tcp -& ...
- js声明json数据,打印json数据,遍历json数据,转换json数据为数组
1.js声明json数据: 2.打印json数据: 3.遍历json数据: 4.转换json数据为数组; //声明JSON var json = {}; json.a = 1; //第一种赋值方式(仿 ...