我已经写了一个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;
答案 0 :(得分: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); }
答案 1 :(得分: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;
在这里,我根据您的问题使用了数组的长度,数据是2d数据数组。