如何在不知道XLS文件的工作表名称的情况下,将XLS工作表安全地转换为XML文件?

时间:2014-10-06 17:12:54

标签: c# oledb xls oledbconnection oledbdataadapter

我调整了我发现here的代码,将XLS转换为XML,如下所示:

try
{
    System.Data.OleDb.OleDbConnection MyConnection;
    System.Data.DataSet ds;
    System.Data.OleDb.OleDbDataAdapter MyCommand;
    String fullFilePath = @"C:\worldSeries2014\baltimoreOrioles.xls";
    MyConnection = new 
   System.Data.OleDb.OleDbConnection(String.Format("provider=Microsoft.Jet.OLEDB.4.0;Data 
   Source='{0}';Extended Properties=Excel 8.0;", fullFilePath));
    MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet0$]", 
      MyConnection);
    MyCommand.TableMappings.Add("Table", "Product"); // I don't know what this does
    ds = new System.Data.DataSet();
    MyCommand.Fill(ds);
    MyConnection.Close();
    ds.WriteXml(@"C:\MiscellaneousJones\os.xml");
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
} 

这是有效的(只要正在加载的.xls文件有一个名为“Sheet0”的工作表

,就会创建xml文件,其中包含xls文件中第一张工作表中的数据)

如果我改用这一行(这是我开始使用的示例代码):

MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection);

...我明白了,“ Sheet1 $不是有效名称。请确保它不包含无效字符或标点符号且不会太长

美元符号显然是必要的,就像我使用它一样:

MyCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [Sheet0]", MyConnection);

...我明白了,“ Microsoft Jet数据库引擎无法找到对象'Sheet0'

那么,我可以依靠“Sheet0”始终作为要转换的工作表的名称吗?我相当肯定我不能,所以如何在每次使用“表0”(第一张)时,无论其名称如何?或者,有没有办法以编程方式确定工作表名称并使用它?

1 个答案:

答案 0 :(得分:1)

使用TableSchema,您可以使用OleDb提取工作表名称。

dtSchema = conObj.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
相关问题