繁体   English   中英

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

[英]How can I safely convert an XLS sheet to an XML file without knowing the XLS file's sheet name?

我调整了在这里找到的将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文件创建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”(第一个)? 或者,是否可以通过编程方式确定工作表名称并使用该名称?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM