一个单元格一个单元格的写入Excel虽然不错,但是速度太慢,要重复的操作Excel对象. 在网上找到了个办法,是写入数组,然后由数组直写入Excel中,速度要快许多.
1. 生成Object数组的方法
2. 数据操作的代码
3.生成表头的代码
其中dt是DataTable对象,是由select查询结果返回的. Worksheet是Office的Excel对象,我使用的是Office2003, 但是强烈使用Office2000,兼容性可能会好一些,Office中在引用了Excel.dll之后,可以用 Excel.对象名来操作对象.
1. 生成Object数组的方法
- public object[,] GetObjectArray(System.Data.DataTable dt)
- {
- object[,] objData = new object[dt.Rows.Count, dt.Columns.Count];
- for (int i = 0; i < dt.Rows.Count; i++)
- {
- // string col ="A" + (i+2).ToString();
- for (int j = 0; j < dt.Columns.Count; j++)
- {
- objData[i, j] = dt.Rows[i][j].ToString();
- }
- }
- return objData;
- }
2. 数据操作的代码
- Worksheet sheetUnknown;
- sheetUnknown.Name = "NYBB";
- Range rgeData = this.GetHeaderRange(dt, sheetUnknown);
- object[] objHeader =
- {
- "CompanyClaimID","FullCOmpanyClaimID","ValueDate","ClaimantName","MEVStatus",
- "ClosedDate","Reserve","Deductible","TotalPaid","ExpensePaid","TotalIncurred",
- "Description","StatusID","Effective","NamedInsured","LossTypeID","CoverageID",
- "DateOfLoss","DateReported","LocationAddress","LocationCity","LocationState",
- "LocationZip","CauseID","Recovery"
- };
- rgeData.Value2 = objHeader;
- //因为我的Excel表中有表头,所以Cell的起始行从2开始,到总行数+1... 表头的生成方法如下.
- sheetUnknown.get_Range(sheetUnknown.Cells[2, 1], sheetUnknown.Cells[dt.Rows.Count + 1, dt.Columns.Count]).Value2 = GetObjectArray(dt);
3.生成表头的代码
- public Range GetHeaderRange(System.Data.DataTable dt,Worksheet worksheet)
- {
- Range rgeData = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, dt.Columns.Count]);
- rgeData.Font.Bold = true;
- rgeData.Font.Size = 9;
- rgeData.Interior.ColorIndex = 15;
- rgeData.HorizontalAlignment = XlHAlign.xlHAlignCenter;
- rgeData.EntireColumn.AutoFit();
- return rgeData;
- }
其中dt是DataTable对象,是由select查询结果返回的. Worksheet是Office的Excel对象,我使用的是Office2003, 但是强烈使用Office2000,兼容性可能会好一些,Office中在引用了Excel.dll之后,可以用 Excel.对象名来操作对象.