C# 在C中不使用for循环将数组列表导入excel格式#
例如,我的列表中有大量数据,我使用for循环来完成。但将数据导入excel需要更多时间。 我在不使用for循环的情况下尝试了以下代码。但是我在range.set_值中得到了以下错误 错误:类型为的未处理异常 mscorlib.dll中出现“System.Runtime.InteropServices.COMException” 其他信息:来自HRESULT的异常:0x800A03ECC# 在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
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);