ClosedXML 读写Excel文件

ClosedXML是以OpenXML为基础读写xlsx文件的类库。

1.读xlsx文件

首先 using ClosedXML.Excel;

然后

 using (XLWorkbook wb = new XLWorkbook(@"E:\JOB\1.xlsx"))
 {
IXLWorksheet ws = wb.Worksheets.First();//获得第一个Sheet。

//通过Worksheet(int position);函数获得sheet,position从1开始。

//不能使用ws.RowCount();获得很大的值。

//遍历所有可使用的行

var rows = ws.RowsUsed()
        foreach (var row in rows)

{

//取得cell的值

string temps = row.Cell(columnIndex).GetString();//columnIndex列索引值从1开始


//遍历所有的Cells

foreach(var cell in row.Cells())

{

string tempst = cell.Value.ToString();

}

}

//一般情况下读的时候会过滤行,最常见的过滤掉首行因为他是标题。

var rows = ws.RowsUsed().Skip(1);//1是过滤掉行数,返回的结果是行的集合

var row = ws.RowsUsed().First().RowBelow(2);//2是过滤掉的函数。返回的结果是单行。他返回第三行

}


2.写xlsx文件

  using (XLWorkbook ww = new XLWorkbook())
  {
          using (IXLWorksheet wws = ww.Worksheets.Add("Sheet1"))//sheet 名称
           {

                   wws.Row(1,2).Value = "xxxx"; //第一行第二列赋值

           //这里随便使用,只需使用行和列即可。当然也可以使用"A1"单独访问单元格。

  }

ww.SaveAs(@"D:\1.xlsx");

}


注意:此部分是后添加的。实际测试按照上面的方法写文件。出现错误原因是他的属性没有设置。

wb4.Properties.Author = "theAuthor";
wb4.Properties.Title = "theTitle";
wb4.Properties.Subject = "theSubject";
wb4.Properties.Category = "theCategory";
wb4.Properties.Keywords = "theKeywords";
wb4.Properties.Comments = "theComments";
wb4.Properties.Status = "theStatus";
wb4.Properties.LastModifiedBy = "theLastModifiedBy";
wb4.Properties.Company = "theCompany"

wb4.Properties.Manager = "theManager";


假如新创建一定设置上面的值,修改可能不需要!


由于使用的过程中没有涉及到样式,因此这写就不介绍了。网上很多,但是读的时候遍历和过滤行很少。

说完使用,说说他的弊病:非常耗内存,最后竟然发生System.OutOfMemory错误。无法执行。

我的应用是打开一个xlsx文件然后在另外两个xlsx文件中查询。调试时发现内存以2M的步伐增长,知道超过1G多以后挂掉。

最后将xlsx数据导入到SQLite数据库中然后使用sql查询解决。

使用ClosedXML时慎重考虑内存的事宜。由于时间问题没有测试他的性能。

将项目中的ClosedXML读xlsx文件的代码使用OpenXML改写,运行发现内存大约在66M运行5分钟没有增长,使用OpenXML还可以。但是查找的时候非常慢,5分钟没有查询完。

三个文件记录数:202 158 6153

在二个文件记录数:1906 2042中遍历查询。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值