/// 本功能实现将程序中datagridview中的数据表导出到本地的excel /// </summary> /// <param name="dgv"> datagridview的名称 </param> /// <param name="localFilePath"> 当地要保存的路径 </param> /// <param name="tableName"> 保存的表名 </param> public void Ex_Excel(DataGridView dgv, string localFilePath, string tableName) HSSFWorkbook workbook = new HSSFWorkbook(); MemoryStream ms = new MemoryStream(); // 表单名 NPOI.SS.UserModel.Sheet sheet = workbook.CreateSheet( " Sheet1 " ); // DataGridView行数 int rowCount = dgv.Rows.Count; // DataGridView列数 int colCount = dgv.Columns.Count; // 数据表格样式 NPOI.SS.UserModel.CellStyle dataStyle = workbook.CreateCellStyle(); dataStyle.BorderBottom = NPOI.SS.UserModel.CellBorderType.THIN; dataStyle.BorderLeft = NPOI.SS.UserModel.CellBorderType.THIN; dataStyle.BorderTop = NPOI.SS.UserModel.CellBorderType.THIN; dataStyle.BorderRight = NPOI.SS.UserModel.CellBorderType.THIN; // 标题表格样式 NPOI.SS.UserModel.CellStyle titleStyle = workbook.CreateCellStyle(); titleStyle.BorderBottom = NPOI.SS.UserModel.CellBorderType.THIN; titleStyle.BorderLeft = NPOI.SS.UserModel.CellBorderType.THIN; titleStyle.BorderTop = NPOI.SS.UserModel.CellBorderType.THIN; titleStyle.BorderRight = NPOI.SS.UserModel.CellBorderType.THIN; NPOI.SS.UserModel.Font font = workbook.CreateFont(); font.Boldweight = 10 ; font.FontHeightInPoints = 16 ; titleStyle.SetFont(font); titleStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER; // 数据表标题 NPOI.SS.Util.CellRangeAddress rangTitle = new NPOI.SS.Util.CellRangeAddress( 0 , 0 , 0 , colCount - 1 ); sheet.AddMergedRegion(rangTitle); NPOI.SS.UserModel.Cell titleCel = sheet.CreateRow( 0 ).CreateCell( 0 ); titleCel.SetCellValue(tableName); titleCel.CellStyle = titleStyle; NPOI.SS.UserModel.Row colNameRow = sheet.CreateRow( 1 ); for ( int i = 0 ; i < colCount; i++ ) if (dgv.Columns[i].Visible) // 把表头存入 NPOI.SS.UserModel.Cell cel = colNameRow.CreateCell(i); cel.SetCellValue(dgv.Columns[i].HeaderText.ToString()); cel.CellStyle = dataStyle; // 数据表数据 for ( int j = 0 ; j < rowCount; j++ ) NPOI.SS.UserModel.Row dataRow = sheet.CreateRow(j + 2 ); for ( int k = 0 ; k < colCount; k++ ) if (dgv.Columns[k].Visible && dgv.Rows[j].Cells[k].Value != null ) // 把数据保存到二维数组 NPOI.SS.UserModel.Cell cel = dataRow.CreateCell(k); // cel.SetCellValue(dgv.Rows[j].Cells[k].Value.ToString()); cel.SetCellValue(dgv.Rows[j].Cells[k].FormattedValue.ToString()); cel.CellStyle = dataStyle; workbook.Write(ms); FileStream file = new FileStream(@localFilePath, FileMode.Create); workbook.Write(file); file.Close(); workbook = null ; ms.Close(); ms.Dispose();

附:npoi是外部程序集。

一、npoi读取excle表操作:

using (FileStream stream = new FileStream(@"c:\客户资料.xls", FileMode.Open, FileAccess.Read))

HSSFWorkbook workbook = new HSSFWorkbook(stream);

MessageBox.Show(workbook.GetSheetName(0));

•读取字符串类型数据MessageBox.Show(sheet.GetRow(3).GetCell(4).StringCellValue);
读取数字类型数据NumericCellValue。
•判断单元格数据类型:读取GetCell(4).CellType,与HSSFCell类中定义的常量比较即可。
•判断使用区域:结束行号:LastRowNum
二、写入Excel

HSSFWorkbook workbook = new HSSFWorkbook();

HSSFSheet sheet = workbook.CreateSheet();

HSSFRow row = sheet.CreateRow(0);

row.CreateCell(0, HSSFCell.CELL_TYPE_STRING).SetCellValue("Hello");

row.CreateCell(1, HSSFCell.CELL_TYPE_NUMERIC).SetCellValue(3.14);

using (FileStream stream = new FileStream(@"c:\1.xls", FileMode.OpenOrCreate, FileAccess.ReadWrite))

workbook.Write(stream);