Select 细胞集合
Select collection of cells
我需要 select 工作表中的一组单元格。我可以找到如何 select 一个范围,但当单元格是 "isolated".
时却找不到
例如“$D$4”、“$G$9”...
我的代码:
var excelApp = Globals.ThisAddIn.Application;
List<string> unlockedCells = new List<string>();
foreach (_Excel.Range cells in excelApp.ActiveSheet.UsedRange)
{
if (!cells.Locked)
{
unlockedCells.Add(cells.Address);
}
}
unlockedCells.ForEach(_c =>
{
excelApp.Range[_c].Select();
});
这里的问题是每次 selected 一个新的范围时,之前的 selection 就会丢失。
另一种方法。它不起作用,引发异常 Exception from HRESULT: 0x800A03EC at Microsoft.Office.Interop.Excel._Application.get_Range(Object Cell1, Object Cell2)
我得到的范围如下:"$D,$E,$D,$E,$D,$E,$D,$E,$D,$E"
StringBuilder output = new StringBuilder();
...
output.Append(String.Format("{0},", cells.Address));
string rangeDef = output.ToString().Left(output.Length - 1);
excelApp.Range[rangeDef].Select();
我该如何实现?
Office 版本 2016
虽然 excelApp
本身确实有 Range
属性,但工作簿或工作表不明确。相反,尝试引用某个工作表的 Range
:
StringBuilder output = new StringBuilder();
output.Append("C4,");
output.Append("D5,");
output.Append("E6,");
string rangeDef = output.ToString().Substring(0, output.Length - 1);
Worksheet worksheet = excelApp.ActiveSheet;
Range range = worksheet.Range[rangeDef];
range.Value = "test";
为我工作了一些最小的测试。
List<string> cells = new List<string>();
cells.Add("$C");
cells.Add("$D");
cells.Add("$H");
for (int idx = 0; idx < cells.Count; idx++)
cells[idx] = String.Format("'{0}'!{1}", (excelApp.ActiveSheet as _Excel.Worksheet).Name, cells[idx]);
string rangeDef = String.Format("={0}", String.Join(";", cells));
var sheet = (excelApp.ActiveSheet as _Excel.Worksheet).get_Range(rangeDef, Type.Missing).Select();
我好像遗漏了工作表名称。
我需要 select 工作表中的一组单元格。我可以找到如何 select 一个范围,但当单元格是 "isolated".
时却找不到例如“$D$4”、“$G$9”...
我的代码:
var excelApp = Globals.ThisAddIn.Application;
List<string> unlockedCells = new List<string>();
foreach (_Excel.Range cells in excelApp.ActiveSheet.UsedRange)
{
if (!cells.Locked)
{
unlockedCells.Add(cells.Address);
}
}
unlockedCells.ForEach(_c =>
{
excelApp.Range[_c].Select();
});
这里的问题是每次 selected 一个新的范围时,之前的 selection 就会丢失。
另一种方法。它不起作用,引发异常 Exception from HRESULT: 0x800A03EC at Microsoft.Office.Interop.Excel._Application.get_Range(Object Cell1, Object Cell2)
我得到的范围如下:"$D,$E,$D,$E,$D,$E,$D,$E,$D,$E"
StringBuilder output = new StringBuilder();
...
output.Append(String.Format("{0},", cells.Address));
string rangeDef = output.ToString().Left(output.Length - 1);
excelApp.Range[rangeDef].Select();
我该如何实现?
Office 版本 2016
虽然 excelApp
本身确实有 Range
属性,但工作簿或工作表不明确。相反,尝试引用某个工作表的 Range
:
StringBuilder output = new StringBuilder();
output.Append("C4,");
output.Append("D5,");
output.Append("E6,");
string rangeDef = output.ToString().Substring(0, output.Length - 1);
Worksheet worksheet = excelApp.ActiveSheet;
Range range = worksheet.Range[rangeDef];
range.Value = "test";
为我工作了一些最小的测试。
List<string> cells = new List<string>();
cells.Add("$C");
cells.Add("$D");
cells.Add("$H");
for (int idx = 0; idx < cells.Count; idx++)
cells[idx] = String.Format("'{0}'!{1}", (excelApp.ActiveSheet as _Excel.Worksheet).Name, cells[idx]);
string rangeDef = String.Format("={0}", String.Join(";", cells));
var sheet = (excelApp.ActiveSheet as _Excel.Worksheet).get_Range(rangeDef, Type.Missing).Select();
我好像遗漏了工作表名称。