using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using MySql.Data.MySqlClient;
using System.Data;
using NPOI.HSSF.Util;
using NPOI.HSSF.UserModel;
using NPOI.SS.Util;
using NPOI.SS.UserModel;
using System.IO;
//实际上该函数除表头从DataGridView读取,
//其余的信息是从DataTable中读取
//因为要对DataGridView中的数据进行强制转换比DataTable麻烦
namespace资产管理系统
{
classNPOIExportExcelHepler
{
///<summary>
///私有成员
///</summary>
privateHSSFWorkbook n_objBook;
privateHSSFSheet n_objSheet;
private HSSFRown_objHeadRow;
privateHSSFDataFormat n_objDataformat;
privateHSSFCellStyle n_objCellStyle;
///<summary>
///数据表到Excel
///</summary>
///<param name="fileName">存储文件的文件名</param>
///<param name="dgv">DataGridView</param>
///<param name="InforDataTable">DataTable</param>
publicvoidDataGridViewToExcel(string fileName, DataGridView dgv, DataTable InforDataTable)
{
//不导出空表
if(dgv.Rows.Count == 0)
{
return;
}
SaveFileDialogsaveFlie = newSaveFileDialog();
saveFlie.DefaultExt = "xls";
saveFlie.Filter = "Excel 2007格式|*.xls";
saveFlie.FileName = fileName + DateTime.Now.ToString("yyyyMMddHHmmss");
//是否存储,否,返回
if(saveFlie.ShowDialog() != DialogResult.OK)
{
return;
}
//Excel操作对象
n_objBook = newHSSFWorkbook();
n_objSheet =(HSSFSheet)n_objBook.CreateSheet(fileName);
n_objHeadRow =(HSSFRow)n_objSheet.CreateRow(0);
n_objDataformat =(HSSFDataFormat)n_objBook.CreateDataFormat();
n_objCellStyle =(HSSFCellStyle)n_objBook.CreateCellStyle();
//表头
for (int i = 0;i < dgv.Columns.Count; ++i)
{
HSSFCell headCell =(HSSFCell)n_objHeadRow.CreateCell(i, CellType.String);
headCell.SetCellValue(dgv.Columns[i].HeaderText);
}
//数据写入
for (int i = 0;i < dgv.Rows.Count; ++i)
{
HSSFRow n_Row =(HSSFRow)n_objSheet.CreateRow(i + 1);
for (int j = 0;j < dgv.Columns.Count; ++j)
{
HSSFCell cell =(HSSFCell)n_Row.CreateCell(j);
stringvalueType = InforDataTable.Rows[i][j].GetType().ToString();
string value =InforDataTable.Rows[i][j].ToString();
//指定数据的类型并赋值,采用TryParse进行强制转换
switch(valueType)
{
case"System.String":
n_Row.CreateCell(j).SetCellValue(value);
break;
case"System.DateTime":
System.DateTimedateValue;
System.DateTime.TryParse(value,outdateValue);
//MessageBox.Show("i="+i.ToString()+"j="+j.ToString()+"value="+value.ToString());
n_Row.CreateCell(j).SetCellValue(dateValue);
n_objCellStyle.DataFormat = n_objDataformat.GetFormat("yyyy/MM/dd HH:mm:ss");//设置日期类型数据列的单元格格式
n_Row.Cells[j].CellStyle = n_objCellStyle;
break;
case"System.Boolean":
boolboolValue = false;
bool.TryParse(value,outboolValue);
n_Row.CreateCell(j).SetCellValue(boolValue);
break;
case"System.Int16":
case"System.Int32":
case"System.Int64":
case"System.Byte":
intintValue = 0;
int.TryParse(value,outintValue);
n_Row.CreateCell(j).SetCellValue(intValue);
break;
case"System.Decimal":
case"System.Double":
doubledoubleValue = 0;
double.TryParse(value,outdoubleValue);
n_Row.CreateCell(j).SetCellValue(doubleValue);
break;
case"System.DBNull":
n_Row.CreateCell(j).SetCellValue("");
break;
default:
n_Row.CreateCell(j).SetCellValue("");
break;
}
}
}
//设置各列自动适应单元个字符长度
for (int i = 0;i < dgv.Columns.Count; ++i)
{
n_objSheet.AutoSizeColumn(i);
}
//写入操作异常检测,检测文件是否被占用
try
{
using (FileStream fs = newFileStream(saveFlie.FileName,FileMode.Create))
{
n_objBook.Write(fs);//写入
fs.Close();//关闭数据流
GC.Collect();//垃圾回收(销毁数据流)
}
MessageBox.Show("导出成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (Exception)
{///异常报出有待改善
MessageBox.Show("文件“" + fileName + "”正在被另一程序占用", "错误提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
}
}
}
}