如何在不了解XLS文件的情况下安全地将XLS工作表转换为XML文件';的工作表名称

本文关键字:文件 工作 XLS XML 转换 不了解 情况下 安全 | 更新日期: 2023-09-27 18:25:46

我用在这里找到的代码将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"(第一个),不管它的名称如何?或者,有没有一种方法可以通过编程确定图纸名称并使用它?

如何在不了解XLS文件的情况下安全地将XLS工作表转换为XML文件';的工作表名称

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

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