在Excel工作表名称中使用哈希符号(#)
当我试图使用OLE DB读取Excel文件时,我试图解决一个问题。 我发现问题是因为在工作表名称中有一个哈希标记(#) 不幸的是,我无法重命名该工作表 因此,经过一些尝试,我通过添加引号(')成功地阅读了整张纸: 之前在Excel工作表名称中使用哈希符号(#),excel,oledb,Excel,Oledb,当我试图使用OLE DB读取Excel文件时,我试图解决一个问题。 我发现问题是因为在工作表名称中有一个哈希标记(#) 不幸的是,我无法重命名该工作表 因此,经过一些尝试,我通过添加引号(')成功地阅读了整张纸: 之前 Select * from [" + sheetName + "$]; 工作后 但是,当我试图从具有OLE DB功能的工作表中读取范围时,我被卡住了: Select * from [" + sheetName + "$" + fromCell + ":" + toCell +
Select * from [" + sheetName + "$];
工作后
但是,当我试图从具有OLE DB功能的工作表中读取范围时,我被卡住了:
Select * from [" + sheetName + "$" + fromCell + ":" + toCell + "];
当我尝试发送此命令时,似乎#
被
替换,然后它找不到工作表
我试过很多密码和转义码,但没有找到任何解决办法。如何访问此文件?您的最终输出应如下所示
'MySheet$A1:B2'
因此,您的选择应该是
var SheetName = "MySheet";
var fromCell = "A1";
var toCell = "B2";
var sql = "Select * from ['" + SheetName + "$" + fromCell + ":" + toCell + "']";
Console.WriteLine(sql);
// Output
// Select * from ['MySheet$A1:B2']
还考虑参数化SQL以提高可读性,并防止SQL代码注入。您可以在上找到如何执行此操作的指南。
我已为您的sql
提供了所需的格式,以便在我的答案中使用此范围。您还需要知道的是,不同版本的Microsoft Office Access数据库引擎以不同的方式处理其命令中的范围。因此,如果您坚持使用最新的(2010 atm),特别是如果您要使用活动范围和工作表范围范围,而不是全局工作簿范围。
var SheetName = "MySheet";
var fromCell = "A1";
var toCell = "B2";
var sql = "Select * from ['" + SheetName + "$" + fromCell + ":" + toCell + "']";
Console.WriteLine(sql);
// Output
// Select * from ['MySheet$A1:B2']