将Excel电子表格读入数据表格中

4
我在程序中使用以下C#代码,使用oledbconnection读取Excel 97-2003电子表格数据到datatable中,但遇到了“名称在当前上下文中不存在”的问题。
DataTable rs = null;

string path = Path.GetFullPath(filePath);
odConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';");
odConnection.Open();
OleDbCommand cmd = new OleDbCommand(); ;
OleDbDataAdapter oleda = new OleDbDataAdapter();
DataSet ds = new DataSet();
DataTable dt = odConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string sheetName = string.Empty;
if (dt != null)
{
    sheetName = dt.Rows[0]["Sheet_Name"].ToString();
}

cmd.Connection = odConnection;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "SELECT * FROM [" + sheetName + "]";
oda = new OleDbDataAdapter(cmd);
oda.Fill(ds, "excelData");
rs = ds.Tables["excelData"];

添加更多细节。 异常,行号,您的Excel有哪些表格? - Samvel Petrosov
第三行,odConnection 的名称在当前上下文中不存在。 - pbj
1
您尚未声明odConnection,因此它不存在。请尝试在“odConnection”之前添加“var”,例如: - Samvel Petrosov
@SamvelPetrosov 谢谢,有没有一种方法可以筛选一个特定的电子表格,而不是循环所有的表格。我有12个不同的表格,我只对一个电子表格感兴趣。 - pbj
请看一下我的答案。 - Samvel Petrosov
2个回答

8
以下是从xlsx文件中获取特殊Sheet的所有列和行的示例。该代码从xlsx文件的Sheet2中提取所有数据,并将这些值填充到DataTable中。 希望这能对您有所帮助。
using System;
using System.Data;
using System.Data.OleDb;

namespace ConsoleApp4
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable rs = new DataTable();

            using (var odConnection = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=c:\Users\IIG\Desktop\test.xlsx;Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';"))
            {
                odConnection.Open();

                using (OleDbCommand cmd = new OleDbCommand())
                {
                    cmd.Connection = odConnection;
                    cmd.CommandType = CommandType.Text;
                    cmd.CommandText = "SELECT * FROM [Sheet2$]";
                    using (OleDbDataAdapter oleda = new OleDbDataAdapter(cmd))
                    {
                        oleda.Fill(rs);
                    }
                }
                odConnection.Close();
            }
            foreach(DataRow row in rs.Rows)
            {
                foreach(object item in row.ItemArray)
                {
                    Console.Write(item +"\t");
                }
                Console.WriteLine();
            }
        }
    }
}

非常感谢。这很有帮助。 - pbj

0

以下这行代码可能是导致问题的原因 -

if (dt != null)
    {
        sheetName = dt.Rows[0]["Sheet_Name"].ToString();
    }

尝试使用

dt.Rows[0]["Table_name"].ToString(); 

这应该返回工作表的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接