为了账号安全,请及时绑定邮箱和手机立即绑定

将数组写入Excel范围

将数组写入Excel范围

C#
杨魅力 2019-07-20 14:30:36
将数组写入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万)行,因此这非常耗时。
查看完整描述

3 回答

?
繁华开满天机

TA贡献1816条经验 获得超4个赞

这是我的方法的摘录,它将DataTable(DT变量)转换为数组,然后将数组写入工作表上的范围(WSH Var)。您还可以将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,代码摘录只是演示如何在单次调用中将数组写入工作表。


查看完整回答
反对 回复 2019-07-20
  • 3 回答
  • 0 关注
  • 679 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信