C# 在C中不使用for循环将数组列表导入excel格式#

C# 在C中不使用for循环将数组列表导入excel格式#,c#,excel,office-interop,C#,Excel,Office Interop,例如,我的列表中有大量数据,我使用for循环来完成。但将数据导入excel需要更多时间。 我在不使用for循环的情况下尝试了以下代码。但是我在range.set_值中得到了以下错误 错误:类型为的未处理异常 mscorlib.dll中出现“System.Runtime.InteropServices.COMException” 其他信息:来自HRESULT的异常:0x800A03EC List NGDetailsList=new List(); 添加(新的myobj{name=“AAA”,des

例如,我的列表中有大量数据,我使用for循环来完成。但将数据导入excel需要更多时间。 我在不使用for循环的情况下尝试了以下代码。但是我在range.set_值中得到了以下错误

错误:类型为的未处理异常 mscorlib.dll中出现“System.Runtime.InteropServices.COMException” 其他信息:来自HRESULT的异常:0x800A03EC

List NGDetailsList=new List();
添加(新的myobj{name=“AAA”,designation=“test”});
添加(新的myobj{name=“BBB”,designation=“test1”});
Microsoft.Office.Interop.Excel.Application PcInfoFile;
Microsoft.Office.Interop.Excel.Workbook工作簿;
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
PcInfoFile=new Microsoft.Office.Interop.Excel.Application();
PcInfoFile.Visible=false;
PcInfoFile.Visible=true;
工作簿=PcInfoFile.Workbooks.Open(@“C:\Users\AAAA\Desktop\New Microsoft Excel Worksheet.xlsx”);
xlWorkSheet=workbook.Worksheets.get_项(1);
//获取二维数组的维数
int rowCount=2;
int columnCount=2;
//获取相同维度的Excel范围
Microsoft.Office.Interop.Excel.Range=(Microsoft.Office.Interop.Excel.Range)xlWorkSheet.Cells[1,1];
范围=范围。获取大小(行数、列数);
//将二维数组指定给Excel范围
range.set_值(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault,NGDetailsList);

下面的示例代码对我有用:

public class ExportImportExcel
    {
        #region Constructor
        public ExportImportExcel()
        {

        }
        #endregion Constructor

        #region Methods
        public static void ExportToExel(DataGridView DGV, System.Data.DataTable Dt)
        {
            try
            {
                //Install-Package Microsoft.Office.Interop.Excel
                Microsoft.Office.Interop.Excel.Application exeleapp = new Microsoft.Office.Interop.Excel.Application();
                var exelbook = exeleapp.Workbooks.Add(XlSheetType.xlWorksheet);
                var exelworksheet = (Worksheet)(exelbook.Worksheets[1]);
                exelworksheet.DisplayRightToLeft = true;

                int clmncnt = DGV.Columns.Count;
                Range[] rng = new Range[clmncnt];

                for (int x = 0; x < clmncnt; x++)
                {
                    string celladress = Convert.ToString(Convert.ToChar(Convert.ToByte(x + 65))) + "1";
                    rng[x] = exelworksheet.get_Range(celladress, celladress);
                    rng[x].Value2 = DGV.Columns[x].HeaderText;
                }

                int j = 2;
                foreach (DataRow r in Dt.Rows)
                {
                    for (int k = 0; k < clmncnt; k++)
                    {
                        string celladress = Convert.ToString(Convert.ToChar(Convert.ToByte(k + 65))) + j.ToString();
                        rng[k] = exelworksheet.get_Range(celladress, celladress);
                        rng[k].Value2 = r[k].ToString();
                    }
                    j++;
                }
                exeleapp.Visible = true;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);              
            }
        }

        #endregion Methods
    }

我希望此示例对您有所帮助。

找到了答案,现在它运行良好。 解决方案:使用二维数组而不是列表

       object[,] values = new object[5,4]; 

       // row, column on worksheet
       values[0, 0] = 11;
       values[0, 1] = 12; 
       values[0, 2] = 13; 

       values[1, 0] = 21;
       values[1, 1] = 22;
       values[1, 2] = 23;

       values[2, 0] = 31;
       values[2, 1] = 32;
       values[2, 2] = 32;

       values[3, 0] = 41;
       values[3, 1] = 42;
       values[3, 2] = 42;

       values[4, 0] = 51;  
       values[4, 1] = 52; 
       values[4,2] = 52;

       range.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault, values);

在我的场景中,列表中有大量数据,若我使用for循环,则需要5分钟。@Sankar的单元格必须滚动。这是通过一个循环完成的。请查看此链接:
private void ExportExcel()
        {          
            ExportImportExcel.ExportToExel(DgvInfo, patientDataViewDS.PatientDataView);           
        }

  private void Btn_ExportEXEL_Click(object sender, EventArgs e)
        {            
            var thread1 = new Thread(ExportExcel);
            thread1.Start();                      
        }
       object[,] values = new object[5,4]; 

       // row, column on worksheet
       values[0, 0] = 11;
       values[0, 1] = 12; 
       values[0, 2] = 13; 

       values[1, 0] = 21;
       values[1, 1] = 22;
       values[1, 2] = 23;

       values[2, 0] = 31;
       values[2, 1] = 32;
       values[2, 2] = 32;

       values[3, 0] = 41;
       values[3, 1] = 42;
       values[3, 2] = 42;

       values[4, 0] = 51;  
       values[4, 1] = 52; 
       values[4,2] = 52;

       range.set_Value(Microsoft.Office.Interop.Excel.XlRangeValueDataType.xlRangeValueDefault, values);