【发布时间】:2012-05-16 01:17:00
【问题描述】:
我浏览了网络,根据文档,似乎没有移动 NamedRange 的方法:http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.namedrange_methods(v=vs.80).aspx
我有以下代码将单元格数据复制到几行:
activeSheet.Range[leftColumn + startRow, rightColumn + endRow].Copy();
//activeSheet.Range[leftColumn + startRow, rightColumn + endRow].Delete();
Range newRange = activeSheet.get_Range(leftColumn + (startRow + RowsToMoveDown.Count), rightColumn + (endRow + RowsToMoveDown.Count));
newRange.PasteSpecial(XlPasteType.xlPasteAll, XlPasteSpecialOperation.xlPasteSpecialOperationNone, Missing.Value, Missing.Value);
NamedRange 是我正在复制和粘贴的单元格,它确实将单元格值向下移动了几行,但因为它是复制,所以它会将数据留在上述单元格中,并且 Delete 方法会导致异常。然而,真正的问题是在我将单元格移动到我创建的 NamedRange 之后:
rnArea = activeSheet.Range[leftColumn + startRow , rightColumn + (MyData.Values.Length + startRow)];
Name name = activeBook.Names.Add(uniqueName, rnArea);
仍然是指原始的单元格范围(我将单元格向下移动之前的位置)。
如何在 C# VSTO 4.0 中以编程方式移动 NamedRange?
理想情况下,我不必在将单元格放入 Range 之前移动它们,但如果这是唯一的解决方案,那么我将不得不采用它。
编辑:
阅读 Doug Glancy 关于在 VSTO C# 中尝试类似 VBA 的语法的评论后,我想到了以下内容:
for (int i = 0; i < activeWorkbook.Names.Count; i++)
{
name = activeWorkbook.Names.Item(i + 1);
Debug.Write(name.Name.ToString());
System.Diagnostics.Debug.Write(name.RefersTo.ToString() + Environment.NewLine);
//prints out "Sheet1!$A$1:$A$25"
name.RefersTo = "Sheet1!$A$2:$A$26";
System.Diagnostics.Debug.Write(name.RefersTo.ToString());
//prints out "Sheet1!$A$2:$A$26"
}
但是当我运行此代码并更改 NamedRange RefersTo 值时,结果是 Excel NamedRange DropDownList 中缺少 NamedRange?!?!
【问题讨论】:
-
怀疑这是否有帮助,但我想我会提到它:ozgrid.com/forum/showthread.php?t=21749
-
为了澄清,目标是剪切和粘贴,命名范围跟随单元格到新位置?
-
yes Doug,就像您从 Excel 中的 DropDownList 中选择一个 NamedRange,它将选择 NamedRange 区域,您可以用鼠标拖放该区域,它会移动单元格和 NamedRange。
-
应该是
name.RefersTo ="=Sheet1!$A$2:$A$26";。您缺少括号内的“=”。
标签: c# excel vsto named-ranges