我正在尝试获取Excel文件的第一张表格:
try
{
string constring = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filepath + ";Extended Properties=Excel 12.0;";
OleDbConnection conn = new OleDbConnection(constring);
conn.Open();
DataTable myTables = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
var myTableName = conn.GetSchema("Tables").Rows[0].Table;
string sqlquery = string.Format("SELECT * FROM [{0}]", myTableName);
OleDbDataAdapter da = new OleDbDataAdapter(sqlquery, conn);
da.Fill(dt);
MessageBox.Show(Convert.ToString(dt.Rows.Count));
return dt;
}
catch (Exception e)
{
MessageBox.Show(e.Message, "Error", MessageBoxButton.OK,
MessageBoxImage.Error);
return dt;
}
我做错了什么?
编辑:
出现以下错误:数据库引擎找不到“Tables”对象。
这适用于Visual:
Try
Dim constring As String = "Provider=Microsoft.ACE.OLEDB.12.0;" &
"Data Source=" & filepath &
";Extended Properties=Excel 12.0;"
Dim conn As New OleDbConnection(constring)
conn.Open()
Dim myTables As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, New Object() {Nothing, Nothing, Nothing, "TABLE"})
Dim myTableName = conn.GetSchema("Tables").Rows(0)("TABLE_NAME")
Dim sqlquery As String = String.Format("SELECT * FROM [{0}]", myTableName)
Dim da As New OleDbDataAdapter(sqlquery, conn)
da.Fill(dt)
conn.Close()
MsgBox(dt.Rows.Count)
Return dt
Catch ex As Exception
MsgBox(Err.Description, MsgBoxStyle.Critical)
Return dt
End Try
我正在尝试用C#复制它。
这条错误线似乎是这样的:
var myTableName = conn.GetSchema("Tables").Rows[0].Table;
它试图在VB代码中复制以下一行:
Dim myTableName = conn.GetSchema("Tables").Rows(0)("TABLE_NAME")
发布于 2020-05-03 08:24:07
在这里,这一切都是放在一起的。文件路径字符串前面的@符号接受字符串,不使用\作为转义。在内插字符串中,我们确实需要嵌入双引号的转义字符。“使用”块确保关闭和处理连接。我在一个组合框中显示了结果。
private void opCode()
{
string filePath = @"C:\Users\xxx\Documents\Excel\TestImport.xlsx";
string conString = $"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = {filePath} ; Extended Properties = \"Excel 12.0; HDR = YES;\"";
Debug.Print(conString);
DataTable dt;
using (OleDbConnection cn = new OleDbConnection(conString))
{
cn.Open();
dt = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
}
var exSheets = (from dRow in dt.AsEnumerable()
select dRow["TABLE_Name"]).ToArray();
cbo1.Items.AddRange(exSheets);
}
*注: Linq查询不一定按工作簿中的顺序返回工作表
https://stackoverflow.com/questions/61555756
复制相似问题