将数组写入Excel范围

将数组写入Excel范围

我目前正在尝试使用以下代码将数据从对象数组写入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;

将返回一个数组,其中包含工作表中的所有值,因此我不确定为什么读取和分配的工作方式不同。

有人成功过吗?我目前正在逐个单元格编写数组单元,但它需要处理大量(>5万)行,因此这非常耗时。


杨魅力
浏览 680回答 3
3回答

繁华开满天机

这是我的方法的摘录,它将DataTable(DT变量)转换为数组,然后将数组写入工作表上的范围(WSH Var)。您还可以将topRow变量更改为您希望将字符串数组放在的任何行。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object[,]&nbsp;arr&nbsp;=&nbsp;new&nbsp;object[dt.Rows.Count,&nbsp;dt.Columns.Count]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;r&nbsp;=&nbsp;0;&nbsp;r&nbsp;<&nbsp;dt.Rows.Count;&nbsp;r++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DataRow&nbsp;dr&nbsp;=&nbsp;dt.Rows[r]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;c&nbsp;=&nbsp;0;&nbsp;c&nbsp;<&nbsp;dt.Columns.Count;&nbsp;c++) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;arr[r,&nbsp;c]&nbsp;=&nbsp;dr[c]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Excel.Range&nbsp;c1&nbsp;=&nbsp;(Excel.Range)wsh.Cells[topRow,&nbsp;1]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Excel.Range&nbsp;c2&nbsp;=&nbsp;(Excel.Range)wsh.Cells[topRow&nbsp;+&nbsp;dt.Rows.Count&nbsp;-&nbsp;1,&nbsp;dt.Columns.Count]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Excel.Range&nbsp;range&nbsp;=&nbsp;wsh.get_Range(c1,&nbsp;c2); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;range.Value&nbsp;=&nbsp;arr;当然,您不需要像我一样使用中间DataTable,代码摘录只是演示如何在单次调用中将数组写入工作表。
打开App,查看更多内容
随时随地看视频慕课网APP