我目前正在尝试使用以下代码将数据从对象数组写入 Excel 中的范围,其中objData
只是一个字符串数组:
private object m = System.Type.Missing;
object[] objData = getDataIWantToWrite();
Range rn_Temp;
rn_Temp = (Range)XlApp.get_Range(RangeName, m);
rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1);
rn_Temp.value2 = objData;
这几乎可以工作,问题是范围被填满,但每个单元格都获得了第一个项目的值objData
.
相反的工作,即
private object m = System.Type.Missing;
object[] objData = new object[x,y]
Range rn_Temp;
rn_Temp = (Range)XlApp.get_Range(RangeName, m);
rn_Temp = rn_Temp.get_Resize(objData.GetUpperBound(), 1);
objData = (object[])rn_Temp.value2;
将返回一个包含工作表中所有值的数组,所以我不确定为什么读取和赋值工作方式不同。
有没有人成功地做到过这一点?我目前正在逐个单元地编写数组,但它需要处理大量(> 50,000)行,因此非常耗时。
这是我的方法的摘录,该方法将DataTable
(the dt
变量)写入数组,然后将数组写入Range
在工作表上(wsh
变种)。您还可以更改topRow
变量到您想要将字符串数组放置在的任何行。
object[,] arr = new object[dt.Rows.Count, dt.Columns.Count];
for (int r = 0; r < dt.Rows.Count; r++)
{
DataRow dr = dt.Rows[r];
for (int c = 0; c < dt.Columns.Count; c++)
{
arr[r, c] = dr[c];
}
}
Excel.Range c1 = (Excel.Range)wsh.Cells[topRow, 1];
Excel.Range c2 = (Excel.Range)wsh.Cells[topRow + dt.Rows.Count - 1, dt.Columns.Count];
Excel.Range range = wsh.get_Range(c1, c2);
range.Value = arr;
当然你不需要使用中间体DataTable
就像我所做的那样,代码摘录只是为了演示如何在单次调用中将数组写入工作表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)