本文摘自PHP中文网,作者伊谢尔伦,侵删。
OleDB是微软的战略性的通向不同的数据源的低级应用程序接口。支持很多种数据库,此客户端中DBF文件的输入输出也是使用了此数据库API。使用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);
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();
}
}
|
相关阅读 >>
详细介绍用C#描述数据结构0:导图
C# 使用npoi生成word文档(按照模板)
C#最齐全的上传图片方法介绍
C#如何实现两个richtextbox控件滚动条同步滚动的简单方法
C#开发实例-订制屏幕截图工具(三)托盘图标及菜单实现的图文介绍
使用C#生成pdf文件流的代码案例分享
详细介绍C#中new的几种用法
使用C#给pdf文档添加注释的示例代码分享(图)
C# socket实现简单控制台案例
C#中static void main(string[] args) 参数的示例代码详解
更多相关阅读请进入《C#》频道 >>
清华大学出版社
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。
转载请注明出处:木庄网络博客 » C#如何导入导出与处理Excel文件