DataSet数据写入Excel
### DataSet 数据写入 Excel #### 知识点概述 在软件开发过程中,经常需要将数据库查询结果导出为 Excel 文件以便于进一步分析或共享。在 .NET 框架下,一个常见的做法是使用 `DataSet` 结构来存储查询结果,并通过调用 Office 自动化接口(如 Microsoft.Office.Interop.Excel)将数据写入 Excel 文件。这种方式不仅适用于 `DataSet`,也适用于其他类型的数据集合,如 `DataTable`、`Vector` 和 `ArrayList` 等。 #### 代码实现细节 下面是对给定代码的详细解析: 1. **导入必要的命名空间**: ```csharp using System.Data; using System.Excel; using Microsoft.Office.Tools.Excel; using Microsoft.Office.Tools.Core; ``` 这里需要注意的是 `System.Excel` 和 `Microsoft.Office.Tools.Excel` 命名空间实际上是不存在的。正确的做法应该是使用 `Microsoft.Office.Interop.Excel`。 2. **创建 Excel 应用程序对象**: ```csharp Excel.ApplicationClass objExcel = new Excel.ApplicationClass(); ``` 创建了一个新的 Excel 应用程序实例。在实际应用中,应该使用 `Microsoft.Office.Interop.Excel.Application` 类。 3. **添加一个新的工作簿**: ```csharp objExcel.Workbooks.Add(true); ``` 这行代码用于创建一个新的 Excel 工作簿。注意这里的 `true` 参数没有实际意义,正确的方法应该是不带任何参数。 4. **设置单元格格式**: ```csharp objExcel.Cells.NumberFormat = "@"; ``` 设置所有单元格的默认格式为文本模式,这样可以确保所有的数据都能正确显示,而不会被 Excel 自动转换成数字或其他格式。 5. **设置列宽**: ```csharp objExcel.Cells.ColumnWidth = "15"; ``` 设置每列的宽度为 15 个字符。这里需要注意,`ColumnWidth` 属性实际上并不存在,正确的做法是遍历每一列并设置宽度。 6. **填充表头**: ```csharp for (int m = 0; m < myDTable.Columns.Count; m++) { int c = m + 1; objExcel.Cells[1, c] = myDTable.Columns[m].Caption.ToString(); } ``` 遍历 `DataTable` 的每一列,并将列名写入 Excel 的第一行。这里假设 `myDTable` 是从 `DataSet` 中获取的第一个表。 7. **填充数据行**: ```csharp for (int i = 0; i < myDTable.Rows.Count; i++) { int row = i + 2; objExcel.Cells[row, 1] = myDTable.Rows[i][0].ToString(); objExcel.Cells[row, 2] = myDTable.Rows[i][1].ToString(); objExcel.Cells[row, 3] = myDTable.Rows[i][2].ToString(); objExcel.Cells[row, 4] = myDTable.Rows[i][3].ToString(); objExcel.Cells[row, 5] = myDTable.Rows[i][4].ToString(); } ``` 遍历每一行,并将数据写入 Excel。这里假设每行有五列数据。 8. **保存 Excel 文件**: ```csharp objExcel.Save("Result.xls"); ``` 将当前工作簿保存到名为 `Result.xls` 的文件中。这里需要注意的是,在实际操作中应该使用 `Workbook.SaveAs` 方法来保存文件。 9. **异常处理**: ```csharp catch (Exception e) { throw e; } ``` 捕获并重新抛出异常,这通常不是一个好的做法,因为可能会丢失异常的原始堆栈跟踪信息。 #### 扩展知识点 - **使用 COM 自动化操作 Excel**: - 使用 `Microsoft.Office.Interop.Excel` 命名空间可以访问 Excel 对象模型,从而实现对 Excel 的自动化操作。 - **处理大量数据**: - 当处理大量数据时,应该考虑使用内存优化的技术,比如分批读取和写入数据。 - **安全性和性能问题**: - 使用 COM 自动化可能会导致性能问题,特别是当应用程序需要处理大量数据时。此外,由于 COM 自动化会启动一个实际的 Excel 实例,因此还可能带来安全性风险。 - **替代方案**: - 对于需要频繁执行的操作,可以考虑使用专门的库如 EPPlus 或 NPOI,这些库提供了更高效且易于使用的 API 来操作 Excel 文件。 将 `DataSet` 中的数据写入 Excel 文件是一个常见的需求,但需要注意选择合适的方法和技术,以确保代码的效率、可维护性和安全性。
using System.Excel;
using Microsoft.Office.Tools.Excel;
using Microsoft.Office.Tools.core;
/**
*** 将一个数据源[DataSet/DataTable/Voctor/ArryList等等]的数据,导入Excel,生成.xls文件
*** Paramater:数据源对象
*** Athor:Norfei
*** 14:36 2008-5-28
*** 这里以 DataSet 为例
*/
private void ImportExcel(DataSet ds)
{
Excel.ApplicationClass objExcel = new Excel.ApplicationClass();//创建Excel对象
objExcel.Workbooks.Add(true);//创建Excel工作薄
objExcel.Cells.NumberFormat = "@";//设置Excel为文本形的
objExcel.Cells.ColumnWidth = "15";//设置列每一列的宽度
try
{
System.Data.DataTable myDTable = ds.Tables[0];
for (int m = 0; m < myDTable.Columns.Count; m++)
{
int c = m + int.Parse("1");
objExcel.Cells[1, c] = myDTable.Columns[m].Caption.ToString();//为Excel中最上面的字段头(每一列的头)
}
for (int i = 0; i < myDTable.Rows.Count; i++)//取记录值
- 爱书者2013-04-10是一本好书。好书。
- 普通网友2013-07-23代码可用,但要注意驱动的选择。
- wjp200420052012-06-16txt的不是源码
- mingan_x2013-04-01解决了我毕业设计的难题,挺好的
- amazingNF2017-08-14呼,标题说dataset,你tables[0]是几个意思?dataset只能包含一个datatable?
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术资料分享TF卡资料很好的技术资料.zip
- 技术资料分享TF介绍很好的技术资料.zip
- 10、安徽省大学生学科和技能竞赛A、B类项目列表(2019年版).xlsx
- 9、教育主管部门公布学科竞赛(2015版)-方喻飞
- C语言-leetcode题解之83-remove-duplicates-from-sorted-list.c
- C语言-leetcode题解之79-word-search.c
- C语言-leetcode题解之78-subsets.c
- C语言-leetcode题解之75-sort-colors.c
- C语言-leetcode题解之74-search-a-2d-matrix.c
- C语言-leetcode题解之73-set-matrix-zeroes.c