C#操作EXCEL.pdf
《C#操作EXCEL.pdf》由会员分享,可在线阅读,更多相关《C#操作EXCEL.pdf(100页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C#操作 EXCEL下面代码是几年前初做项目写的代码,没加整理,仅供基础参考呵呵using System;using System.10;using System.Reflection;using System.Collections;using Excel;using System.Data;using System.Data.OleDb;using System.Runtime.InteropServices;namespace Business.Common(操作Excel的接口public interface Excellnterface(把Excel中的数据导入具体的物理表中(单表)
2、bool InDataFromExcelColumns(OleDbConnection conn,string tableName,string|tableColsName,string excelFilePath,string excelColsName);bool DataInTableFromExcel(System.Data.DataTable objDataTable,string excelFilePath);bool DataInTableColsFromExcelCols(System.Data.DataTable objDataTable,stringtableColsNam
3、e,string excelFilePath,string excelColsName);bool DataUpdateTableColsFromExcelCols(OleDbConnection conn,string tableName,stringPID,string|tableColsName,System.Data.DataTable srcDataTable,string srcColsName);bool OutDataToExcel(System.Data.DataTable srcDataTable,string excelFilePath);System.Data.Data
4、Table GetDataFromExcel(string excelFilePath);)具体的一个实现类public class ExcelOperate:Excellnterface(导入数据2003.11.28(增添了可设置是否表的第一列是自增长的id 列)public bool InDataFromExcelColumns(OleDbConnection conn,string tableName,string tableColsName,string excelFilePath,string excelColsName,bool hasSysID)(if(hasSysID)(ret
5、urnthis.InDataFromExcelColumns(conn,tableName TableColsName,excelFilePath,excelColsName);else把表的结构全部提取出来OleDbDataAdapter oleDA=new OleDbDataAdapter(select*from n+tableName,conn);DataSet ds=new DataSet();OleDbCommandBuilder oleCmdBlt=new OleDbCommandBuiIder(oleDA);if(conn.State=ConnectionState.Closed
6、)conn.Open();oleDA.Fill(ds);conn.Close();System.Data.DataTable objDataTable=ds.Tables01;if(!this.DataInTableColsFromExcelCols(objDataTable,tableColsName excelFilePath,excelColsName,false)return false;conn.Open();int addNum=oleDA.Update(ds);conn.Close();if(addNum!=0)return true;return false;)把Excel I
7、 的数据导入具体的物理表中(单表)public bool InDataFromExcelColumns(OleDbConnection conn,string tableName,string tableColsName,string excelFilePath,string excelColsName)(/try/把表的结构全部提取出来OleDbDataAdapter oleDA=new OleDbDataAdapter(select*from n+tableName,conn);DataSet ds=new DataSet();OleDbCommandBuilder oleCmdBlt=n
8、ew OleDbCommandBui!der(oleDA);if(conn.State=ConnectionState.Closed)conn.Open();oIeDA.Fill(ds);conn.Close();System.Data.DataTable objDataTable=ds.TablesO;if(!this.DataInTableColsFromExcelCols(objDataTable,tableColsName,excelFilePath,excelColsName)return false;conn.Open();int addNum=oleDA.Update(ds);c
9、onn.Close();if(addNum!=0)return true;return false;/)/catch/return false;/)由Excel中的数据完全导入到表中(前提是excel的表结构与要导入的表的结构是完全一样的)public bool DataInTableFromExcel(System.Data.DataTable objDataTable,string excelFilePath)(先得到excel文件对应的表System.Data.DataTable excelDataTable=this.GetDataFromExcel(excelFilePath);if
10、(excelDataTable=null II excelDataTable.Rows.Count=0II(excelDataTable.Rows.Count=l)&(excelDataTable.Columns.Count=l)&(excelDataTable.Rows00.ToString().Equals()return false;if(objDataTable=null)return false;if(excelDataTable.Columns.Count!=objDataTable.Columns.Count)return false;检测数据类型是否匹配fbr(int i=0;
11、i objDataTable.Columns.Count;i+)(if(!this.IsMatchDataType(objDataTable.ColumnsiJ.DataType.ToString(),excelDataTable.Columnsi.DataType.ToString()return false;)完全添加进去System.Data.DataRow myDataRow;for(int i=0;i excelDataTable.Rows.Count;i+)(myDataRow=objDataTable.NewRow();for(int j=0;j objDataTable.Col
12、umns.Count;j+)(myDataRowj=this.GetMatchData(objDataTable.Columns|j.DataType.ToString(),excelDataTable.Rowsij.ToString().Trim();objDataTable.Rows.Add(myDataRow);return true;)III/给指定的表的某列更新成Excel中某列的数据III III 对此表有效的连接v/paramIII 物理表的表名 /vparam name=PID此物理表的主键列名称(这里认为主键列只有,个)/此物理表中要更新的列集合/更新的数据源/对应 tabl
13、eColsName 中数据源中的列名集合/public bool DataUpdateTableColsFromExcelCols(OleDbConnection conn,stringtableName,string ID,string tableColsName,System.Data.DataTable srcDataTable,string srcColsName)(此时认为objDataTable srcDataTable的第一列的id 列是连接关系OleDbDataAdapter oleDA=new OleDbDataAdapter(select*from n+tableName,
14、conn);DataSet ds=new DataSet();OleDbCommandBuilder oleCmdBlt=new OIeDbCommandBuilder(oleDA);if(conn.State=ConnectionState.Closed)conn.Open();oleDA.Fill(ds);conn.Close();System.Data.DataTable objDataTable=ds.TablesO;设主键DataColumn keyCols=new DataColumnl;keyCols0=objDataTable.ColumnsID;objDataTable.Pr
15、imaryKey=keyCols;循环检测物理表的每一条记录是不是要更新for(int i=0;i objDataTable.Rows.Count;i+)(string idValue=objDataTable.RowsiID.ToString().Trim();for(int j=0;j srcDataTable.Rows.Count;j+)fstring tempID=srcDataTable.Rowsj0.ToString().Trim();if(tempID.Equals(id Value)objDataTable.Rowsi.BeginEdit();=for(int k=0;k ob
16、jDataTable.Columns.Count;k+)(int index=this.MatchStringIndex(objDataTable.Columnsk.ColumnName,tableColsName);if(index!=-1)(objDataTable.Rowsi tableColsNameindex=this.GetMatchData(objDataTable.Columnslk.DataType.ToString().Trim(),srcDataTable.Rows|jsrcColsNameindex.ToString().Trim();)/=一 =:=:=-:=一 二o
17、bjDataTable.Rowsi.EndEdit();break;)/forconn.Open();int affect=oleDA.Update(ds);conn.Close();if(affect=0)return false;return true;)/2003.1L28TO(增添了可设置是否表的第一列是自增长的id 歹 U)public bool DataInTableColsFromExcelCols(System.Data.DataTable objDataTable,stringtableColsName,string excelFilePath,string excelCol
18、sName,bool hasID)(此时认为objDataTable是都有自动增长的id 列if(tableColsName=null I I excelColsName=null II tableColsName.Length!=excelColsName.Length)return false;先得到excel文件对应的表System.Data.DataTable excelDataTable=this.GetDataFromExcel(excelFilePath);if(excelDataTable=null II excelDataTable.Rows.Count=0II(excelD
19、ataTable.Rows.Count=l)&(excelDataTable.Co!umns.Count=l)&(excelDataTable.Rows00.ToString().Equals(,H)return false;if(objDataTable=null)return false;把相应的数据添加到目标表中首先验证要添加的数据与源数据的类型是否匹配/for(int i=0;i excelColsName.Length;i+)/string srcDataType=excelDataTable.Columns excelColsNamei|.DataType.ToString().T
20、rim();/string objDataType=objDataTable.Columns tableColsNamei.DataType.ToString().Trim();/if(!this.IsMatchDataType(objDataType,srcDataType)/return false;/)/System.Data.DataRow myDataRow;添加(一次添加一行)/myDataRow=objDataTable.NewRow();int colNum=objDataTable.Columns.Count;/object col Values=new Object col
21、 Num ;int dataRow=excelDataTable.Rows.Count;for(int k=0;k dataRow;k+)(/int colNum=objDataTable.Columns.Count;object colValues=new Object!colNum;认为第一列是自动增长的id 列,不添加任何值,由系统自动生成/colValues0=Guid.NewGuid();int addindex=0;int j=0;if(hasID)j=1 ;for(;j colNum;j+)(if(this.NumberInSource(objDataTable.Columnsj
22、.ColumnName,tableColsName)!=1 )(colValueslj=this.GetMatchData(objDataTable.Columnsj.DataType.ToString(),;/myDataRowj J =this.GetMatchData(objDataTable.Columns|j.DataType.ToString(),;)else/是要添加数据的列时(找到与此列对应的tableColsName中的项索弓Iint index=MatchStringIndex(objDataTable.Columnsj.ColumnName,tableColsName);
23、colValues|j=this.GetMatchData(objDataTable.ColumnsjJ.DataType.ToString(),excelDataTable.RowskexcelColsNameindex.ToString().Trim();/myDataRowj=this.GetMatchData(objDataTable.Columnsj.DataType.ToString(),exceIDataTable.RowskexcelColsNameaddIndex+.ToString().Trim();objDataTable.Rows.Add(col Values);)re
24、turn true;)给指定的表的某列导入Excel中某列的数据public bool DataInTableColsFromExcelCols(System.Data.DataTable objDataTable,stringtableColsName,string excelFilePath,string excelColsName)(此时认为objDataTable是都有自动增长的id 列if(tableColsName=null I I excelColsName=null II tableColsName.Length!=excelColsName.Length)return fal
25、se;先得到excel文件对应的表System.Data.DataTable excelDataTable=this.GetDataFromExcel(excelFilePath);if(excelDataTable=null II excelDataTable.Rows.Count=0II(excelDataTable.Rows.Count=!)&(excelDataTable.CoIumns.Count=l)&(excelDataTable.RowsfO0.ToString().Equals(n)return false;if(objDataTable=null)return false;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 操作 EXCEL
限制150内