NPOI从datagridview导出到excel问题!

问题描述

PrivateSubgotoexcel_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)Handlesgoexcel.ClickDimworkbookAsNewHSSFWorkbook'工作簿DimsheetAsHSSFSheet'工作表DimexcelrowAsHSSFRow'行集DimmAsInteger'行的循环变量DimnAsInteger'列的循环变量DimsaveDialogAsWindows.Forms.SaveFileDialog'保存文件的对话框DimmsAsMemoryStream'内存中的数据流DimfsAsFileStream'文件流DimfilenameAsString'保存时的文件名称'如果DataGridView中没有数据,则不导出ExcelIfhegelv.DataGridViewX1.Rows.Count=0ThenMsgBox("无法导出为Excel!",MsgBoxStyle.Exclamation,"提示")ExitSubEndIfDimmymycolorAsColorsheet=workbook.CreateSheet("柴油")Form=0Tohegelv.DataGridViewX1.Rows.Count-1sheet=workbook.GetSheet("柴油")excelrow=sheet.CreateRow(0)'在工作表中创建标题行Row(0)excelrow=sheet.CreateRow(m+1)'每遍历一行,则在sheet中创建一行Forn=0Tohegelv.DataGridViewX1.Columns.Count-1'遍历每一行中的所有列Ifhegelv.DataGridViewX1.Columns(n).Visible=TrueAndhegelv.DataGridViewX1.Rows(m).Visible=TrueThen'如果该列可见,则导出该列单元格的值DimstyleAsICellStyle=workbook.CreateCellStyle()style.Alignment=HorizontalAlignment.Centerstyle.BorderBottom=BorderStyle.Thinstyle.BorderLeft=BorderStyle.Thinstyle.BorderRight=BorderStyle.Thinstyle.BorderTop=BorderStyle.Thinmymycolor=GetCellBackColor(hegelv.DataGridViewX1.Rows(m).Cells(n))’这个是获取单元格背景色style.FillForegroundColor=GetXLColour(workbook,mymycolor)‘转换成npoi的颜色style.FillPattern=FillPattern.SolidForegroundstyle.FillBackgroundColor=GetXLColour(workbook,mymycolor)DimcellAsICell=excelrow.CreateCell(n)cell.SetCellValue(hegelv.DataGridViewX1.Rows(m).Cells(n).Value.ToString)cell.CellStyle=styleEndIf'如果该列不可见,则将该列设置为隐藏Ifhegelv.DataGridViewX1.Columns(n).Visible=FalseThensheet.SetColumnHidden(n,True)EndIfNextNextsaveDialog=NewWindows.Forms.SaveFileDialog'保存文件对话框saveDialog.DefaultExt="xls"'设置默认文件扩展名saveDialog.Filter="Excel文件|*.xls"'文件类型saveDialog.ShowDialog()'弹出保存文件对话框filename=saveDialog.FileName'将对话框中输入的文件名赋给filenamems=NewMemoryStream()fs=NewFileStream(filename,FileMode.Create)'写入数据workbook.Write(fs)fs.Close()'关闭文件workbook=Nothingms.Close()ms.Dispose()EndSub这样不能正确读取datagridview的颜色,每个单元格那里都创建了一个style只能获取43个单元格的颜色。如果创建一个总的style但最终起作用的是最后设置的那个结果,导出的背景全部是一个颜色了!

解决方案

解决方案二:
先导出完数据,再设置EXCEL内容格式。
解决方案三:
感觉你这样导数据太慢了。直接复制粘贴过去,然后再一行行设置EXCEL格式就快很多了!
解决方案四:
引用2楼轻鸿万里的回复:

感觉你这样导数据太慢了。直接复制粘贴过去,然后再一行行设置EXCEL格式就快很多了!

导出数据是很快的!50000条数据导出也就几秒!

时间: 2024-09-30 20:47:13

NPOI从datagridview导出到excel问题!的相关文章

DataGridView导出到Excel

这几天做一个Winform的系统,需要用到将DataGridView导出成Excel,以前一直没有在意这些方面的问题,因为以前做VB的时候已经做过很多这方面的导出,所以总认为小菜一碟. 我用的是VS2005和Office2003. 可是真正使用的时候才发现问题多多: 首先是添加了Microsoft Excel11 Object Libray之后,发现引用里面的" Microsoft.Office.Interop.Excel"不能用.出现了一个可恶的黄色小感叹号.这可真愁坏我了.后来在网

asp.net DataGridView导出到Excel的三个方法[亲测]_实用技巧

#region DataGridView数据显示到Excel    /// <summary>     /// 打开Excel并将DataGridView控件中数据导出到Excel    /// </summary>     /// <param name="dgv">DataGridView对象 </param>     /// <param name="isShowExcle">是否显示Excel界面 

DataGridView导出到Excel的三个方法

原文:[转]DataGridView导出到Excel的三个方法 原文出处:http://www.yongfa365.com/Item/DataGridViewToExcel.html #region DataGridView数据显示到Excel /// <summary> /// 打开Excel并将DataGridView控件中数据导出到Excel /// </summary> /// <param name="dgv">DataGridView对象

C#WinForm中dataGridView导出为Excel的问题,20分~~~~~~~~在线等~~~~

问题描述 数据库表:s_names_ages_citys_sexs_money张三20漯河男1000李四25郑州女800王五30安阳男900赵六26驻马店男300这些数据会显示在datagridview中,导出为Excel的时候Excel里显示成这样:姓名年龄安阳漯河驻马店郑州性别张三201000男李四25800女王五30900男赵六26300男 解决方案 解决方案二:你要的excel的样子好奇葩啊解决方案三:如果你能把下面的需求显示到DataGridView中,你都知道怎么导出了.数据结构是"

dataGridView导出到Excel出点问题

问题描述 publicvoiddataGridViewToExcel(DataGridViewdgv){SaveFileDialogsaveFileDialog=newSaveFileDialog();saveFileDialog.Filter="Execlfiles(*.xls)|*.xls";saveFileDialog.FilterIndex=0;saveFileDialog.RestoreDirectory=true;saveFileDialog.CreatePrompt=tr

C# DataGridView 导出 Excel(根据Excel版本显示选择不同后缀格式xls或xlsx)

/// <summary> /// DataGridView导出至Excel,解决问题:打开Excel文件格式与扩展名指定格式不一致 /// </summary> /// <param name="dataGridView">数据源表格</param> /// <param name="isShowExcle">导出时是否显示excel界面</param> /// <returns>

如何随导出的excel的改动更新datagridview?

问题描述 winform程序实现从datagridview导出到excel,并当datagridview变化时,excel相应作变化(Excel.Application打开excel),反之,excel变化,datagridview也相应变化.不知"excel变化,datagridview也相应变化"这个怎么实现 解决方案 解决方案二:不知道這個想法可以不.監測excel文件的修改時間(每隔一段時間確認一次如果excel修改時間有變化就導入到datagridview).解决方案三:你可

c#-将datagridview的数据导出为excel时出现异常

问题描述 将datagridview的数据导出为excel时出现异常 "System.InvalidCastException"类型的未经处理的异常在 FaceTest.exe 中发生 其他信息: 无法将类型为"Microsoft.Office.Interop.Excel.ApplicationClass"的 COM 对象强制转换为接口类型"Microsoft.Office.Interop.Excel._Application".此操作失败的原因

datagridview导出excel

问题描述 datagridview导出excel 开始是生成03的excel,我想改成生成07的excel,要怎么去实现? 解决方案 NPOI 比较好的选择,可以导入导出,支持2003和2007 .NET用,开源的 解决方案二: 参考:http://blog.csdn.net/lanshengsheng2012/article/details/11479183 同时支持2003 2007 NPOI.HSSF 2003 NPOI.XSSF 2007 代码不需要任何修改 解决方案三: 在导出之前要先