如何为Excel单元格分配值数组而不会丢失VSTO中的表格格式

时间:2012-05-30 21:23:44

标签: excel formatting vsto

这可能很容易,但此刻它逃脱了我。我根据一些新发现对问题进行了重写。

我在Excel加载项中广泛使用了二维值数组,以提高原始速度。

我使用扩展方法提取单元格数组并对其进行修改,然后将值重新放回。

e.g:

// Get all cells in the worksheet - this is a formatted table including headings
Range range = worksheet.UsedRange;

// Get all values as a 2D array
object[,] cells = range.GetCellArray();

... // do things to the array 

// Assign the entire array back to worksheet, but table formatting is erased
Range.Value = cells;

表格格式仅由数组赋值删除。这就是删除了指定的表ListObject条目。

有没有办法保持表格式?

2 个答案:

答案 0 :(得分:1)

可能有更好的方法,但我的第一个想法是将数组输出到临时表,然后复制输出和Paste Special - >值仅在您想要的范围内。最后,删除临时表。

答案 1 :(得分:1)

事实证明,如果替换格式化表格的标题行的单元格,则会完全丢失该表格。

解决方案是只替换标题下的行。

// Get all cells in the worksheet - this is a formatted table including headings
Range range = worksheet.UsedRange;

// Get all values as a 2D array
object[,] cells = range.GetCellArray();

... // do things to the array 

// Assign the entire array MINUS THE HEADING ROW, back to worksheet
cells = cells.SubArray(2, 1, cells.RowCount() - 1, cells.ColumnCount());
EXCEL.Range targetRange = worksheet.GetRange(1, 2, cells.ColumnCount(), cells.RowCount());
targetRange.Value = cells;

SubArrayGetRangeRowCountColumnCount方法都是我之前创建的扩展方法,但您可以从他们的名称和示例中了解他们的所作所为