1

我对自己编写的 Excel 加载项做了一些噩梦。客户工作簿曾经是从 SQL 连接填充的,并且围绕命名表等设置了大量公式。我正在尝试使用来自 WCF 服务的数据填充连接填充的一些相同的表(使用现有的页眉和页脚)同时保持格式和公式(即:不破坏任何东西)。

输入数据就好了。我遇到的问题是:被替换的数据可能比命名范围中当前存在的数据更多或更少。我似乎找不到删除现有行并用我的新数据替换它们并将命名范围调整为新数据的方法。

提前谢谢了。

Range range = activeWorksheet.get_Range("Name", MissingValue);
range.Clear();
object[,] data = new object[result.Length, 26];
range.get_Resize(result.Length, 26);
... fill data....
range.Value2 = data;   
4

2 回答 2

1

好的,设法用下面的代码解决它。还删除了阻止格式被删除的“range.Clear()”调用。

 Range range = activeWorksheet.get_Range("Name", MissingValue);
 int totalMissingRows = 0;
            if (range.Rows.Count < result.Length)
            {
                totalMissingRows = result.Length - range.Rows.Count;
                for (int i = 0, l = totalMissingRows; i < l; i++)
                {

                    Excel.Range rng = range;
                    rng = (Excel.Range)rng.Cells[rng.Rows.Count, 1];
                    rng = rng.EntireRow;
                    rng.Insert(Excel.XlInsertShiftDirection.xlShiftDown, MissingValue);
                }
            }

            //delete extra lines
            //remove left over data
            for (int i = result.Length, l = range.Rows.Count; i < l; i++) { range.Cells[range.Rows.Count, 1].EntireRow.Delete(null); }
于 2012-10-02T13:53:36.040 回答
0

既然,你已经得到了一个数据数组,为什么不直接把它写到 excel 中,如下所示:
int startRow, startCol;
var startCell = (Range)worksheet.Cells[startRow, startCol];
var endCell = (Range)worksheet.Cells[startRow + result.Length, startCol + 26];
var writeRange = worksheet.get_Range(startCell, endCell);
writeRange.Value2 = data;

在这里,我根据您的问题使用了数组的长度,数据是二维数据数组。

于 2012-10-04T10:53:16.577 回答