因为DevExpress.XtraGrid.GridControl.ExportToExcel方法导出Excel效率实在是太低了,13000条记录差不多要用10分钟,让我无法容忍。估用以下方法导出,提高效率近10倍
public void Save()
{
string fileName = "";
//以下DataSet根据自己实际定义,本人的u_ListBase1是继承自DevExpress.XtraGrid.GridControl
DataSet ds2 = u_ListBase1.GetCurrentDataSet();//选中要保存的数据
SaveFileDialog saveFileDialog1 = new SaveFileDialog();
saveFileDialog1.Filter = "Excel文件(*.xls)|*.xls"; //设置对话框保存的文件类型
saveFileDialog1.Title = "保存导出数据......"; //设置对话框标题
saveFileDialog1.InitialDirectory = @"c:\"; //设置初始保存路径
saveFileDialog1.RestoreDirectory = true; //设置保存对话框是否记忆上次打开的目录
saveFileDialog1.ShowHelp = true; //设置是否显示帮助按钮
u_ListBase1.ShowFooter = false;
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
fileName = saveFileDialog1.FileName; //文件名
SuperToExcel(ds2.Tables[0], fileName);
u_ListBase1.ShowFooter = true;
}
}
//高效导出Excel
public static bool SuperToExcel(System.Data.DataTable excelTable, string filePath)
{
Excel.Application app =
new Excel.ApplicationClass();
try
{
app.Visible = false;
Workbook wBook = app.Workbooks.Add(true);
Worksheet wSheet = wBook.Worksheets[1] as Worksheet;
Excel.Range range;
int colIndex = 0;
int rowIndex = 0;
int colCount = excelTable.Columns.Count;
int rowCount = excelTable.Rows.Count;
//创建缓存数据
object[,] objData = new object[rowCount + 1, colCount];
//写标题
int size = excelTable.Columns.Count;
for (int i = 0; i < size; i++)
{
wSheet.Cells[1, 1 + i] = excelTable.Columns[i].Caption;
}
range = (Range)wSheet.get_Range(app.Cells[1, 1], app.Cells[1, colCount]);
range.Interior.ColorIndex = 15;//背景色 灰色
range.Font.Bold = true;//粗字体
//获取实际数据
for (rowIndex = 0; rowIndex < rowCount; rowIndex++)
{
for (colIndex = 0; colIndex < colCount; colIndex++)
{
objData[rowIndex, colIndex] = excelTable.Rows[rowIndex][colIndex].ToString();
}
}
//写入Excel
range = (Range)wSheet.get_Range(app.Cells[2, 1], app.Cells[rowCount + 1, colCount]);
range.NumberFormatLocal = "@";//设置数字文本格式
range.Value2 = objData;
//Application.DoEvents();
wSheet.Columns.AutoFit();
//设置禁止弹出保存和覆盖的询问提示框
app.DisplayAlerts = false;
app.AlertBeforeOverwriting = false;
wBook.Saved = true;
wBook.SaveCopyAs(filePath);
app.Quit();
app = null;
GC.Collect();
return true;
}
catch (Exception err)
{
MessageBox.Show("导出Excel出错!错误原因:" + err.Message, "提示信息",
MessageBoxButtons.OK, MessageBoxIcon.Information);
return false;
}
finally
{
}
}
com操作excel的一些特性操作:
range.NumberFormatLocal = "@"; //设置单元格格式为文本
range = (Range)worksheet.get_Range("A1", "E1"); //获取Excel多个单元格区域:本例做为Excel表头
range.Merge(0); //单元格合并动作
worksheet.Cells[1, 1] = "Excel单元格赋值"; //Excel单元格赋值
range.Font.Size = 15; //设置字体大小
range.Font.Underline=true; //设置字体是否有下划线
range.Font.Name="黑体"; 设置字体的种类
range.HorizontalAlignment=XlHAlign.xlHAlignCenter; //设置字体在单元格内的对其方式
range.ColumnWidth=15; //设置单元格的宽度
range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb(); //设置单元格的背景色
range.Borders.LineStyle=1; //设置单元格边框的粗细
range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb()); //给单元格加边框
range.EntireColumn.AutoFit(); //自动调整列宽
Range.HorizontalAlignment= xlCenter; // 文本水平居中方式
Range.VerticalAlignment= xlCenter //文本垂直居中方式
Range.WrapText=true; //文本自动换行
Range.Interior.ColorIndex=39; //填充颜色为淡紫色
Range.Font.Color=clBlue; //字体颜色
xlsApp.DisplayAlerts=false; //保存Excel的时候,不弹出是否保存的窗口直接进行保存
workbook.SaveCopyAs(temp);/**////填入完信息之后另存到路径及文件名字