EXCEL读取与写入数据的最佳方案[转]

news/2024/7/21 6:39:43 标签: Excel, 数据结构, Microsoft, J#, .net
友仔要用的,先放在这里,以后用得着再看:)

在以往使用Excel文件时,我一般认为是使用COM组件进行EXCEL文档的操作,这样写程序即费时又费力(因为EXCEL组件没有帮助提示),写的程序还是大篇的重复代码。为什么为这样那?因为我们总是把一个EXCEL文件当做系统文件进行操作。
如果把EXCEL文件当做一个数据源来进行数据的读取操作时,就可以使用开发环境提供的数据访问方法来访问EXCEL文件了。这样就可以使用开发环境的帮助(提示)即快速又不费力的来读取和写入数据到EXCEL中。这样的代码即整洁又高效,同时代码还可以得到复用。
下面的例子是使用.NET对EXCEL文件的读取和写入
示例的应用环境是从其它一个或多个EXCEL中读取数据,然后将多个数据写入到一个汇总的EXCEL(汇总的EXCEL文件只有表头没有数据)。前提是EXCEL文件内的结构是一样的。
Excel文件的读取
publicDataSetExcelToDS(stringPath)
{
stringstrConn="Provider=Microsoft.Jet.OLEDB.4.0;"+"DataSource="+Path+";"+"ExtendedProperties=Excel8.0;";
OleDbConnectionconn=newOleDbConnection(strConn);
conn.Open();
stringstrExcel="";
OleDbDataAdaptermyCommand=null;
DataSetds=null;
strExcel="select*from[sheet1$]";
myCommand=newOleDbDataAdapter(strExcel,strConn);
ds=newDataSet();
myCommand.Fill(ds,"table1");
returnds;
}
对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到
stringstrConn="Provider=Microsoft.Jet.OLEDB.4.0;"+"DataSource="+Path+";"+"ExtendedProperties=Excel8.0;";
OleDbConnectionconn=newOleDbConnection(strConn);
DataTableschemaTable=objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);
stringtableName=schemaTable.Rows[0][2].ToString().Trim();
Excel文件的写入
publicvoidDSToExcel(stringPath,DataSetoldds)
{
//先得到汇总EXCEL的DataSet主要目的是获得EXCEL在DataSet中的结构
stringstrCon="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+path1+";ExtendedProperties=Excel8.0";
OleDbConnectionmyConn=newOleDbConnection(strCon);
stringstrCom="select*from[Sheet1$]";
myConn.Open();
OleDbDataAdaptermyCommand=newOleDbDataAdapter(strCom,myConn);
ystem.Data.OleDb.OleDbCommandBuilderbuilder=newOleDbCommandBuilder(myCommand);
//QuotePrefix和QuoteSuffix主要是对builder生成InsertComment命令时使用。
builder.QuotePrefix="[";//获取insert语句中保留字符(起始位置)
builder.QuoteSuffix="]";//获取insert语句中保留字符(结束位置)
DataSetnewds=newDataSet();
myCommand.Fill(newds,"Table1");
for(inti=0;i<oldds.Tables[0].Rows.Count;i++)
{
//在这里不能使用ImportRow方法将一行导入到news中,因为ImportRow将保留原来DataRow的所有设置(DataRowState状态不变)。在使用ImportRow后newds内有值,但不能更新到Excel中因为所有导入行的DataRowState!=Added
DataRownrow=aDataSet.Tables["Table1"].NewRow();
for(intj=0;j<newds.Tables[0].Columns.Count;j++)
{
nrow[j]=oldds.Tables[0].Rows[i][j];
}
newds.Tables["Table1"].Rows.Add(nrow);
}
myCommand.Update(newds,"Table1");
myConn.Close();
}


以上只是一个示例只能给大家提供一个关于操作EXCEL另一条思路,具体案例具体开发!!!!!!!

http://www.niftyadmin.cn/n/602864.html

相关文章

java 怎么inputstream_Java中InputStream装饰器模式的大家族

因为和输入流与之对应的还有输出流(即OutputStream)&#xff0c;在此只针对输入流InputStream讨论。1. 家族老大&#xff1a;一说起家族中的老大&#xff0c;InputStream自然是当仁不让&#xff0c;在java的输入流操作的类中&#xff0c;衍生出的基本子类有&#xff0c;可以理解…

zookeeper单节点和多节点配置

单机单节点模式 zookeeper解压, 放到 /opt/zookeeper/下, 新建一个latest的软链 $ ln -s zookeeper-3.4.12 latest 将 conf/zoo-sample.cfg 重命名为 zoo.cfg, 内容使用默认的就可以 修改 conf/log4j.properties, 这边的日志路径是无效的, 不用动, 注释掉console类型日志, 启用…

计算机等级考试网络工程师好考吗,计算机等级考试一次通过,原来是看了计算机四级网络工程师考试内容...

不要着急&#xff01;不要迷茫&#xff01;不要彷徨&#xff01;考无忧小编送福利-计算机等级考试题库~以下是一些计算机四级网络工程师考试内容&#xff0c;希望能帮到你们~第4章 广域网技术一、电话网公用交换电话网PSTN是向公众提供电话通信服务的一种通信网。电话通信网主…

Rich Edit控件的使用

之前没有使用过Rich Edit控件&#xff0c;以为它的使用方法和Edit Box一样。我建了一个单文档工程A&#xff0c;由A的一个菜单弹出对话框B&#xff0c;再由B的一个按钮弹出对话框C。 代码如下&#xff1a; void B::OnButton1() { CCdlg dlg; dlg.DoModal(); } 但是单击对话…

excel流程图折线箭头_如何绘制excel箭头图形

我们利用excel绘制流程图&#xff0c;那么最不可缺少的就是箭头图形了&#xff0c;因为每一个excel自选图形都要靠箭头图形来连接&#xff0c;绘制excel箭头图形的操作方法如下&#xff1a;1、切换到【格式】选项卡&#xff0c;在【插入形状】组中单击【其他】按钮&#xff0c;…

java8 anymatch_Java 8 stream forEach filter anyMatch 符:去重,排序,过滤,分组,统计...

/*去重&#xff0c;去除重复对象(每个属性的值都一样的)&#xff0c;需要注意的是要先重写对象TestStreamModel的equals和hashCode方法*/System.out.println("去重前&#xff1a;"list);List distinctList list.stream().distinct().collect(Collectors.toList());Sy…

高中在线计算机,高中计算机考试试题集-20210414015151.docx-原创力文档

Revised on November 25, 2020Revised on November 25, 2020高中计算机考试试题集高中计算机考试试题集(一)一、单选题题号题目描述选项&#xff21;选项&#xff22;选项&#xff23;选项&#xff24;答案185Windows的桌面是指()。整个屏幕全部窗口某个窗口活动窗口A186在选择…

Nginx负载均衡环境搭建

2019独角兽企业重金招聘Python工程师标准>>> Nginx负载均衡环境搭建: 第一步:前期准备4台linux. ubuntu-nginx机 : 192.168.124.130 redhat-tomcat机-1 : 192.168.124.129 redhat-tomcat机-2 : 192.168.124.132 ubuntu-tomcat机-3 : 192.168.124.133 第二步…