从 Excel 单元格引用中获取 sheet 名称和单元格引用

Get sheet name and cell reference from Excel cell reference

我需要一种巧妙的方法来拆分 Excel 单元格引用,以便获得 sheet 名称和单元格引用。一般Excel引用可以采用以下形式:

因为Excel允许在sheet名称中使用特殊字符和空格,这使得提取sheet名称和单元格地址变得困难。

有更好的方法吗?正则表达式?我有 0 exp。

注意:我通过命名范围获取单元格引用,因此我坚持使用现有的内容。

?Application.Evaluate("INDIRECT(""Sheet1!A1"")").Address(false, false)

?Application.Evaluate("INDIRECT(""Sheet1!A1"")").WorkSheet.Name

其中 ApplicationExcel.Application

的实例

正则表达式可以处理这项工作。

首先,您需要解析简单的 sheet 名称,例如 'Sheet1'。此名称以字母开头,包含除“!”之外的任何字符。

(\w[^!]*)

其次,您需要解析复杂的 sheet 名称,用单引号括起来:

'([^']+)'

第三,你需要合并这两个正则表达式:

(\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);

试试这个

app.config 文件:

 <appSettings>

<add key="connectionstrings" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:-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 中的列名