日期:2014-05-19  浏览次数:21105 次

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;

}