当工作表名称包含空格时,无法从Excel工作表中读取

时间:2017-08-21 11:56:22

标签: c# excel

我想从excel表中将数据转换为combobox。但是,工作表名称与sheet1$不同。我的Excel工作表名称为Sac Haddehanesi Kalite Kontrol。当我创建工作表名称sheet1时,它可以工作。但是,excel文件是每个人发送的,它是另一个人给出的工作表名称。因此,我必须使用原始工作表名称,并且无法通过以下代码阅读:

pintu(textBox8.Text);
try
{
    con.Open();
    str = "SELECT * FROM  [Sac Haddehanesi Kalite Kontrol$]";
    com = new OleDbCommand(str, con);
    oledbda = new OleDbDataAdapter(com);
    ds = new DataSet();
    oledbda.Fill(ds, "Sac Haddehanesi Kalite Kontrol$");
    con.Close();
    dt = ds.Tables["Sac Haddehanesi Kalite Kontrol$"]; 
    int i = 0;
    for (i = 0; i <= dt.Rows.Count - 1; i++)
        comboBox1.DataSource = dt;
    comboBox1.DisplayMember = "[Bobin ID]";

以下是我的电子表格的图片:

enter image description here

2 个答案:

答案 0 :(得分:1)

在自己调试问题之后,如果工作表名称有特殊字符,那么看起来有问题。

尝试根据索引而不是名称来阅读工作表。

以下代码将所有工作表名称读入临时DataTable,获取第一个工作表名称并在其余代码中使用它:

con.Open();

// Read all sheet names into a temporary data table
DataTable dtExcelSheetName = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

// Get the FIRST sheet name
string sheetName = dtExcelSheetName.Rows[0]["Table_Name"].ToString();

// Now use this name to select
str = "SELECT * FROM  [" + sheetName +"]";

com = new OleDbCommand(str, con);
oledbda = new OleDbDataAdapter(com);
ds = new DataSet();
oledbda.Fill(ds, sheetName);
con.Close();
dt = ds.Tables[sheetName]; 

答案 1 :(得分:0)

我发现当我为Excel宏做VBA时,每张表实际上都有2个名字。姓名(姓名)。当您使用Excel打开时,有一个名称(您显示),但在VBA或其他代码中也有另一个名称可供参考。

请参阅下面的Excel工作表属性

在Excel中,工作表标题为“#34;可以有空格&#34;”。这是您在打开Excel文件时在工作表的选项卡中看到的内容。

在代码中,工作表别名/标题实际上是&#34; CannotHaveSpace&#34;。这是您在任何代码实例中引用此工作表的方法。此名称不能包含空格。

Spaces

我希望这些帮助那些有相同问题的人! :)