我需要一种智能的方法来拆分Excel单元格引用,以获取工作表名称和单元格引用。通常Excel引用可以采用以下形式:
因为Excel允许在工作表名称中使用特殊字符和空格,这使得难以提取工作表名称和单元格地址。
有更好的方法吗?正则表达式?我有0 exp。
注意:我通过命名范围获取单元格引用,因此我坚持使用我拥有的内容。
答案 0 :(得分:0)
?Application.Evaluate("INDIRECT(""Sheet1!A1"")").Address(false, false)
?Application.Evaluate("INDIRECT(""Sheet1!A1"")").WorkSheet.Name
其中Application
是Excel.Application
答案 1 :(得分:0)
正则表达式可以处理这项工作。
首先,您需要解析简单的工作表名称,例如' Sheet1'。此名称以字母开头,包含除'!'。
以外的所有字符(\w[^!]*)
其次,您需要解析复杂的工作表名称,用单引号括起来:
'([^']+)'
第三,你需要结合这两个正则表达式:
(\w[^!]*)|'([^']+)'
最后,编写代码:
private static ExtractSheetName(string cell)
{
var match = Regex.Match(cell, @"(\w[^!]*)|('[^']+)'");
if (match.Success)
{
if (!string.IsNullOrEmpty(match.Groups[1].Value))
return match.Groups[1].Value;
if (!string.IsNullOrEmpty(match.Groups[2].Value))
return match.Groups[2].Values;
}
return null;
}
. . .
// Using:
var sheetName = ExptractSheetName(cell);
string cellRef;
if (sheetName == null)
cellRef = cell;
else
cellRef = cell.Substring(sheetName.Length + 1);
答案 2 :(得分:0)
试试这个
app.config文件:
<appSettings>
<add key="connectionstrings" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\16-07-2014\BDLS_Backup\TVM - Employee List-New.xls;Extended Properties='Excel 8.0;HDR=Yes;;IMEX=2'"/>
</appSettings>
Program.cs:
string connectionString = ConfigurationSettings.AppSettings["connectionstrings"];
OleDbConnection oledbConn = new OleDbConnection(connectionString);
oledbConn.Open();
OleDbCommand cmd = new OleDbCommand("select * from [Sheet1$]", oledbConn);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da.Fill(ds);
DataTable dt = ds.Tables[0];
foreach (DataRow row in dt.Rows)
{
string EmployeeCode = row["EmployeeCode"].ToString();
}
其中[“EmployeeCode”]是sheet1中的列名