C# 连接 Excel
将 Excel 作为数据库连接
Excel为不固定路径名称的文件,C#连接它,通过Excel内的数据 进行相关处理 生成一个新Sheet表。
1.C#能不能遍历 Sheet
2.C#能不能遍历 Sheet 内的 首行
3.C#能不能在现有Excel创建新 Sheet
4.编码上是不是就和数据库一样操作
初学C#,十分感谢。
------解决方案--------------------C# WinForm中实现
开始需加:
using System.Data.OleDb;
在按钮中添加下列代码:
string cs = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\文件.xls;Excel 8.0;HDR=Yes;IMEX=1 ";
OleDbConnection CNN = new OleDbConnection(cs);
CNN.Open();
//历遍Sheet,显示每个Sheet名。
DataTable ttable = cn.GetSchema( "Tables ");
foreach (DataRow row in ttable.Rows)
if (row[ "Table_Type "].ToString() == "TABLE ")
MessageBox.Show(row[ "Table_Name "]);
//历遍某一sheet的所有行,所有列,显示到dataGridView控件。
string ss = "select * from [Sheet1$] "
OleDbCommand CMD = new OleDbCommand(ss, CNN);
OleDbDataReader RAD = CMD.ExecuteReader();
DataTable Tab = new DataTable();
for (int i = 0; i < OleDbRAD.FieldCount; i++)
Tab.Columns.Add(OleDbRAD.GetName(i), OleDbRAD.GetFieldType(i));
DataRow row;
while (OleDbRAD.Read())
{
row = tab.NewRow();
for (int i = 0; i < tab.Columns.Count; i++)
row[i] = OleDbRAD.GetValue(i);
Tab.Rows.Add(row);
}
dataGridView1.DataSource = Tab;
------解决方案--------------------public static ArrayList GetExcelSheet(string FileName)
{
ArrayList ret=new ArrayList();
OleDbConnection Conn=null;
try
{
//连接到Excel;
string strConn = "Provider=Microsoft.Jet.OleDb.4.0; Data Source= "+FileName+ "; Extended Properties=Excel 8.0; ";
Conn = new OleDbConnection(strConn);
Conn.Open();
//获取Sheet的名字。
DataTable schemaTable = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables,null);
//schemaTable.Rows.Count值为Sheet的总数
//注意schemaTable是从0开始,即第0个是第1个Sheet。第2列是Sheet名。
for(int i=0;i <schemaTable.Rows.Count;i++)
{
string s=schemaTable.Rows[i][2].ToString().Trim();
ret.Add(s.Remove(s.Length-1,1));
}
Conn.Close();
}
catch(Exception e)
{
LastErr=e.Message;
}
return ret;
}