gpt4 book ai didi

c# - 从数据表创建 Excel 工作表

转载 作者:行者123 更新时间:2023-11-30 20:38:06 25 4
gpt4 key购买 nike

我遇到了一个奇怪的现象。我写了一个方法,将值从数据表复制到 Excel 工作表。问题是行被复制到列,列被复制到行。

例如:

数据表:

Item   Quantity    UnitPrice   TotalPrice
A 10 2 20
B 3 15 45
C 100 0.5 50

Excel 表格:

Item   Quantity    UnitPrice   TotalPrice
A B C
10 3 100
2 15 0.5
20 45 50

我的代码:

 private void PopulateDataWorkSheet()
{
xl.Workbooks xlWorkbooks = _xlApp.Workbooks;
xl.Workbook xlWorkbook = xlWorkbooks.Open(_excelFileName);
xl.Sheets xlSheets = xlWorkbook.Sheets;
const int startRowIndex = 2; // first row for columns title
const int startColumnIndex = 1;

xl.Worksheet xlDataWorkSheet = xlSheets[DATA_SHEET];
xl.Range xlCells = xlDataWorkSheet.Cells;

for (var rowindex = 0; rowindex < _datatable.Rows.Count; rowindex++)
{
for (var columnindex = 0; columnindex < _datatable.Columns.Count; columnindex++)
{
xlCells[startRowIndex + rowindex][startColumnIndex + columnindex] = _datatable.Rows[rowindex][columnindex];
}
}

xlWorkbook.Save();
xlWorkbook.Close();
xlWorkbooks.Close();

ReleaseExcelObject(xlCells);
ReleaseExcelObject(xlDataWorkSheet);
ReleaseExcelObject(xlSheets);
ReleaseExcelObject(xlWorkbook);
ReleaseExcelObject(xlWorkbooks);
}

我可以通过如下更改来简单地解决它,但我不清楚哪里出了问题:

xlCells[startColumnIndex + columnindex][startRowIndex + rowindex] = _datatable.Rows[rowindex][columnindex];

我的代码中是否遗漏了什么?

最佳答案

I am facing a strange phenomenon. Did I miss something in my code?

欢迎来到 Excel Range、动态、可选参数和 COM 对象 Default 成员概念的世界。

Excel Range 是个奇怪的东西。几乎每个方法/属性都返回另一个范围。您使用的索引器是这样的

dynamic this[object RowIndex, object ColumnIndex = Type.Missing] { get; set; }

即具有必需的行索引和可选的列索引。

让我们接这个电话

xlCells[startRowIndex + rowindex][startColumnIndex + columnindex] = ...;

相当于这样

var range1 = (Excel.Range)xlCells[startRowIndex + rowindex];
var range2 = (Excel.Range)range1[startColumnIndex + columnindex];
// ^^^^^^
// this is treated as row index offset from the range1
range2.Value2 = ...;

很快,您需要将其更改为

xlCells[startRowIndex + rowindex, startColumnIndex + columnindex] = ...;

关于c# - 从数据表创建 Excel 工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35405223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com