问题描述
做了一个年度的工资查询汇总导出excel,但是我现在赋值是1个个单元格赋值,速度超级慢。30个人导出要5分钟。求指导怎么提高效率啊~~~if(dtSalaryPrintInfo.Rows.Count>0){System.Data.DataTableSdt=newSystem.Data.DataTable();Sdt=GetNewDataTable(dtSalaryPrintInfo,dtEmpInfo.Rows[j]["icno"].ToString());for(inti=0;i<Sdt.Rows.Count;i++){//if(dtEmpInfo.Rows[j]["icno"].ToString().Equals(dtSalaryPrintInfo.Rows[i]["icno"].ToString()))//{//#region#region一月if(Sdt.Rows[i]["Month"].ToString()=="1"){worksheet1.Cells[Convert.ToInt32(string.Format("{0}",4+LineCount)),Convert.ToInt32(string.Format("{0}",5+ColCount))]=dtSalaryPrintInfo.Rows[i]["GJTotal"].ToString();Rangerange37=worksheet1.get_Range(string.Format("E{0}",4+RangeCount));//选择操作块range37.Borders.Color=System.Drawing.ColorTranslator.ToOle(myColor);range37.HorizontalAlignment=XlHAlign.xlHAlignCenter;//设置水平对齐方式 }#endregion//#endregion//}}
解决方案
解决方案二:
用这个啊,NPOI,反正用起来还不错
解决方案三:
引用1楼yangmingxing980的回复:
用这个啊,NPOI,反正用起来还不错
想问下效果啊如果我是1万多行的EXCEL数据,他是1次性导出的吗,性能怎么样啊
解决方案四:
NPOI快到没朋友...
解决方案五:
解决方案六:
引用2楼herott632482577的回复:
Quote: 引用1楼yangmingxing980的回复:
用这个啊,NPOI,反正用起来还不错想问下效果啊如果我是1万多行的EXCEL数据,他是1次性导出的吗,性能怎么样啊
才一万条,决定快得很,我自己几万条都很快
解决方案七:
把多个Excel文件导出自动进行汇总//把用户设置的信息写入到系统INI文件中privatevoidbtn_Set_Click(objectsender,EventArgse){WritePrivateProfileString("Set","MultiExcel",txt_MultiExcel.Text,M_str_Name);//设置多个Excel文件路径WritePrivateProfileString("Set","Excel",txt_Excel.Text,M_str_Name);//设置目标Excel文件路径WritePrivateProfileString("Set","Hour",nudown_Hour.Value.ToString(),M_str_Name);//设置小时WritePrivateProfileString("Set","Min",nudown_Min.Value.ToString(),M_str_Name);//设置分钟MessageBox.Show("配置文件设置成功!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);timer1.Start();//启动计时器}//选择多个Excel文件privatevoidbtn_SelectMultiExcel_Click(objectsender,EventArgse){OpenFileDialogopenMultiExcel=newOpenFileDialog();//实例化打开对话框对象openMultiExcel.Filter="Excel文件|*.xls";//设置打开文件筛选器openMultiExcel.Multiselect=true;//设置打开对话框中可以多选if(openMultiExcel.ShowDialog()==DialogResult.OK)//判断是否选择了文件{for(inti=0;i<openMultiExcel.FileNames.Length;i++)//遍历选择的多个文件txt_MultiExcel.Text+=openMultiExcel.FileNames[i]+",";//显示选择的多个Excel文件}}//汇总到一个Excel文件privatevoidtimer1_Tick(objectsender,EventArgse){objectmissing=System.Reflection.Missing.Value;//定义object缺省值string[]P_str_Names=txt_MultiExcel.Text.Split(',');//存储所有选择的Excel文件名stringP_str_Name="";//存储遍历到的Excel文件名List<string>P_list_SheetNames=newList<string>();//实例化泛型集合对象,用来存储工作表名称Microsoft.Office.Interop.Excel.Applicationexcel=newMicrosoft.Office.Interop.Excel.Application();//实例化Excel对象//打开指定的Excel文件Microsoft.Office.Interop.Excel.Workbookworkbook=excel.Application.Workbooks.Open(txt_Excel.Text,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);Microsoft.Office.Interop.Excel.WorksheetnewWorksheet=(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(missing,missing,missing,missing);//创建新工作表if(DateTime.Now.Hour==nudown_Hour.Value&&DateTime.Now.Minute==nudown_Min.Value){for(inti=0;i<P_str_Names.Length-1;i++)//遍历所有选择的Excel文件名{P_str_Name=P_str_Names[i];//记录遍历到的Excel文件名//指定要复制的工作簿Microsoft.Office.Interop.Excel.WorkbookTempworkbook=excel.Application.Workbooks.Open(P_str_Name,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing,missing);P_list_SheetNames=GetSheetName(P_str_Name);//获取Excel文件中的所有工作表名for(intj=0;j<P_list_SheetNames.Count;j++)//遍历所有工作表{//指定要复制的工作表Microsoft.Office.Interop.Excel.WorksheetTempWorksheet=(Microsoft.Office.Interop.Excel.Worksheet)Tempworkbook.Sheets[P_list_SheetNames[j]];//创建新工作表TempWorksheet.Copy(missing,newWorksheet);//将工作表内容复制到目标工作表中}Tempworkbook.Close(false,missing,missing);//关闭临时工作簿}}//codego.net/tags/1/1/workbook.Save();//保存目标工作簿workbook.Close(false,missing,missing);//关闭目标工作簿MessageBox.Show("程序在"+DateTime.Now.ToShortTimeString()+"分时自动汇总了多个Excel文件!","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);CloseProcess("EXCEL");//关闭所有Excel进程}
解决方案八:
引用3楼diaodiaop的回复:
NPOI快到没朋友...
+1现在不用NPOI还用什么?自己写的话如果没有深厚的功底的话写出来的也就仅供娱乐吧.NET下很多提高生产效率的好东东多多使用吧