我正在开发一个项目,我需要用一些数据填充一些excel命名范围。但是我收到这些命名范围的地址为字符串,而不是points = ['4.5','10.0','4.5','5.7','5.5','2.5','6.5','0.3','6.8','0.0','1.0','1.0','3.5','3.5','2','5','6.0','2.0']
x = [float(r) for r in points[0::2]]
y = [float(r) for r in points[1::2]]
# put x/y coordinates in tuples
xy = list(zip(x,y))
# pre-define distance and add subsequent distances
dist = 0
for r in xrange(len(xy)-1):
dist += ( (xy[r][0]-xy[r+1][0])**2 + (xy[r][1]-xy[r+1][1])**2 )**0.5
。字符串看起来像Microsoft.Office.Tools.Excel.NamedRange
。如何将这些字符串转换为NamedRange对象?有预定义的方法吗?感谢你的帮助!
答案 0 :(得分:0)
如果字符串具有一致的模式,您可以将其拆分为一个数组,该数组包含查找所需命名范围所需的信息。
获得工作表名称和地址单元格后,您可以遍历命名范围的工作表,并将每个命名范围的地址与从字符串中提取的数据进行比较:
private const int SHEET_ARRAY_INDEX = 0;
private const int RANGE_START_ARRAY_INDEX = 1;
private const int RANGE_END_ARRAY_INDEX = 2;
static void Main(string[] args)
{
string myString = "Sheet1_A1_A2";
string[] rangeInfo = myString.Split('_');
string sheet = rangeInfo[SHEET_ARRAY_INDEX]; // holds "Sheet1"
string arrayStart = rangeInfo[RANGE_START_ARRAY_INDEX]; // holds "A1"
string arrayEnd = rangeInfo[RANGE_END_ARRAY_INDEX]; // holds "A2"
}
有关迭代命名范围的信息,请参阅:https://bishoponvsto.wordpress.com/2009/09/01/reading-named-ranges-in-excel-using-c/
答案 1 :(得分:0)
它看起来很乱,我打赌有一个更简单/更好的方法来做到这一点......但是这样就完成了它
datetime: {10/1/2016 12:00:00 AM}
format: "ddd, dd MMM"
cultureInfo: {ar-SA}
希望这有助于
答案 2 :(得分:0)
您可以获取名称所指的范围:
range = _excelApp.ActiveWorkbook.Names.OfType<Name>().SingleOrDefault(n => n.Visible && n.Name == "rangeName")?.RefersToRange;
另一种方法是让Excel解析地址:
range = _excelApp.get_Range(address);
这将要求以下列格式之一指定地址:
选项3似乎是要走的路,因为在你的情况下,Sheet1_A1_D1
似乎不是一个命名范围,它看起来像一个时髦的地址字符串。我建议你用&#39;!&#39;替换第一个下划线。第二个是&#39;:&#39;并使用excelApp.get_range
方法。