C#中将Excel.Range转换为字符串

6

使用.NET的Office互操作库,有人知道在字符串(例如“A57”,“$L$2:$M:$3”)和相应类型为Excel.Range的对象之间来回转换的最佳方法吗?

如果还可以使用“命名范围”,则加分。


您的意思不太清楚... "A57","$L$2:$M$3" 是包含单元格引用信息的字符串,您想将其解析为 Excel.Range 吗?还是您指的是其他内容? - code4life
4个回答

6

使用Worksheet对象的Range属性,并将Type.Missing作为第二个参数传递。

例如:

Range range = sheet.get_Range("$L$2:$M:$3", Type.Missing);

这也支持命名区域。


这正是我想要的,不过我也对反向操作(将范围转换为字符串)感兴趣。 - mcoolbeth
将Range的“Name”属性转换为“Name”对象并查看其属性。 - SLaks
你能想到任何原因导致在Visual Studio的工作表中Range属性不可见吗? - mcoolbeth
如果我自己输入“Range”,它就无法构建。我看到了get_Range,但参数/行为没有很好的文档记录。 - mcoolbeth

4
Range获取一个string的方法是:
/// <summary>
/// Extensions to the Range class.
/// </summary>
public static class RangeExtensions
{
    /// <summary>
    /// Returns the range as a string indicating its address.
    /// </summary>
    /// <param name="range">The range to convert to a string.</param>
    /// <returns>A string indicating the range's address.</returns>
    public static string ToAddressString(this Range range)
    {
        return range.Address[true, true, XlReferenceStyle.xlA1, false, null];
    }
}

从一个字符串中获取一个Range的方法是:
public class ExcelUtil
{
    /// <summary>
    /// Converts the given address string on the given sheet to a Range object.
    /// </summary>
    /// <param name="sheet">The worksheet.</param>
    /// <param name="addressString">The address string to convert.</param>
    /// <returns>The range.</returns>
    public static Range RangeFromAddresssString(Worksheet sheet, string addressString)
    {
        return sheet.Range[addressString];
    }
}

第二种方法可能有点多余,但我更喜欢我的方法名称清晰易懂。

1

正如SLaks所说,您可以使用工作表的Range属性从字符串地址获取范围对象,例如worksheet.Range["A3:C30"]。在.NET 4.0中,第二个参数可以省略。.get_Range()等同于.Range[]

要反过来操作,请使用范围对象的Address属性,例如:range.Address


在C#中,似乎必须使用range.get_Address()并按照此处概述的方式提供参数:http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.range.address.aspx - super_seabass

0

如果您想获取单元格的实际内容,请使用Value2属性。以下是一些检查单元格值类型并相应执行不同操作的代码。

Excel.Range cell = (Excel.Range)sheet.UsedRange[row, col];
if (cell.Value2 != null)
{
    switch (Type.GetTypeCode(cell.Value2.GetType()))
    {
        case TypeCode.String:
            string formula = cell.Value2;
            break;
        case TypeCode.Double:
            double amt = (Double)cell.Value2;
            break;
    }
}

cell.Value2 = amt + someotheramt;

HTH


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接