C#如何导入导出与处理Excel文件


本文摘自PHP中文网,作者伊谢尔伦,侵删。

OleDB是微软的战略性的通向不同的数据源的低级应用程序接口。支持很多种数据库,此客户端中DBF文件的输入输出也是使用了此数据库API。使用OleDB记得添加上命名空间:

1

using System.Data.OleDb;

xlsx文件的输入:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

private void inputXlsx()

{

    string strConn2;

    string filePath = inPath;

    FileInfo fileInfo = new FileInfo(filePath);

    string directory = fileInfo.DirectoryName;

 

    strConn2 = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;';";

    string strConnection = string.Format(strConn2, inPath);

    OleDbConnection conn = new OleDbConnection(strConnection);

    try

    {

        conn.Open();

        String tableName = null;

        DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

        tableName = dt.Rows[0][2].ToString().Trim();

        OleDbDataAdapter oada = new OleDbDataAdapter("select * from [" + tableName + "]", strConnection);

        oada.Fill(dtOld);

        conn.Close();  

    }

    catch (Exception ex)

    {

        conn.Close();

    }

}

xlsx文件的中间处理过程因需求而异,在此不再赘述处理方式。在输入过程中,将文件中的数据转化成了Datatable数据类型的格式,它是一个临时保存数据的网格虚拟表,处理非常方便。

xlsx文件的输出:xlsx文件的输出过程并不是很顺利,先后使用了三种方式。

第一种方式自然就是OleDB了,有始有终嘛。但是真正使用的过程中发现此方式不仅要求程序运行本机必须安装Excel,而且对Excel版本要求非常高,如果删注册表很容易弄巧成拙,我改注册表就直接玩坏了Excel。事实上我们并不能保证客户的机器上一定安装了对应版本的Excel,所以如果使用OleDB输出文件,此客户端的兼容性将非常的低劣。

经过一番沟通和挣扎决定还是换一种方式,决定改用第三方组件。由于JAVA方使用的是POI,所以这边直接使用POI项目的.NET版本,NPOI。网上教程很多,很好实现,但是经过测试之后,此种方式对大文件的输入输出支持的不是很好,处理DEMO文件没有问题,但是换成了真正客户提供的十万行级甚至百万行级的文件,客户端直接在输出的过程中崩掉。

查询资料后,网友们对于大文件都建议使用EPPlus。教程也是一抓一大把,我没有继续加大文件大小测试,不过客户给我们提供的十来个文件全部测试通过,基本上都是百万级以下的。

上代码吧:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

private void outputXlsx()

{

    FileInfo newFile = new FileInfo(dtNew.TableName + ".xlsx");

    if (newFile.Exists)

    {

        newFile.Delete();

        newFile = new FileInfo(dtNew.TableName + ".xlsx");

    }

    using (ExcelPackage package = new ExcelPackage(newFile))

    {

        ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(dtNew.TableName);//创建worksheet

 

        for (int m = 0; m < dtNew.Columns.Count; m++)

        {

            worksheet.Cells[1, m + 1].Value = dtNew.Columns[m];

        }

        int i = 1;

        foreach (DataRow dr in dtNew.Rows)

        {

            for (int j = 0; j < dtNew.Columns.Count; j++)

            {

                worksheet.Cells[i + 1, j + 1].Value = dr[j];

            }

            i++;

        }

        package.Save();//保存excel

    }

}

相关阅读 >>

浅谈C# 之 hashtable 与 dictionary的代码实例

C#中常用的运算符有哪些

简单介绍C#中数组、arraylist、list、dictionary的用法与区别

C#使用autoresetevent实现同步的详解及实例

C#是什么,能做些什么?

C#描述数据结构1:统计代码执行时间对象的代码详解

C# 将datatable数据导出到excel表格中的示例代码分享

C#之正则表达式介绍

C#如何使用浏览按钮获得文件路径和文件夹路径的实现方法

C#学习之面向对象如何调用类以及普通方法、静态方法的使用

更多相关阅读请进入《C#》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...