【问题标题】:How can I safely convert an XLS sheet to an XML file without knowing the XLS file's sheet name?如何在不知道 XLS 文件的工作表名称的情况下安全地将 XLS 工作表转换为 XML 文件?
【发布时间】:2014-10-06 17:12:54
【问题描述】:

我修改了我找到的代码 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”始终作为要转换的工作表的名称吗?我很确定我不能,所以我怎么能在每次使用“sheet 0”(第一个),不管它的名字是什么?或者,有没有办法以编程方式确定工作表名称并使用它?

【问题讨论】:

  • If I use this line instead... 这似乎与您的第一个示例中的行相同。我假设那条线上应该是Sheet1$
  • 如果您想在 Excel 文件中检索工作表名称,此 link 也可能会有所帮助。 This 也可以查看Retrieve Data Source Structure (Metadata) from Excel 部分
  • 是的,一个错字(已修复);感谢热链接。

标签: c# oledb xls oledbconnection oledbdataadapter


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多