问题描述
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条数据导出也就几秒!