1.导出

   private void btn_print_Click(object sender, EventArgs e)
{
DataTable dtNew = new DataTable(); dtNew.Columns.Add(new DataColumn("commodity_name", typeof(object)));
dtNew.Columns.Add(new DataColumn("specifications", typeof(object)));
dtNew.Columns.Add(new DataColumn("unit", typeof(object)));
dtNew.Columns.Add(new DataColumn("number", typeof(object)));
dtNew.Columns.Add(new DataColumn("price", typeof(object)));
dtNew.Columns.Add(new DataColumn("money", typeof(object)));
dtNew.Columns.Add(new DataColumn("settlement", typeof(object))); for (int i = ; i < dgv.Rows.Count; i++)
{
DataRow dr = dtNew.NewRow();
dr["commodity_name"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["specifications"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["unit"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["number"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["price"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["money"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["settlement"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? ""); dtNew.Rows.Add(dr);
}
dgv2.DataSource = dtNew; string xlsxName = "其他产品采购单_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xls"; //保存的Excel文件名
TableToExcelForXLSX(dtNew, xlsxName); //传入带出数据及文件名
}
  private void TableToExcelForXLSX(System.Data.DataTable dt, string output)
{
FileStream file = new FileStream(output, FileMode.OpenOrCreate, FileAccess.ReadWrite);
try
{
HSSFWorkbook workbook = new HSSFWorkbook(); //XSSFWorkbook :用于表示高及低层次excel文件格式的类,实现workbook接口。 ISheet sheet = workbook.CreateSheet("sheet"); //ISheet:是一个工作表的高级表示,Row:行;Cell:单元格
IRow row = null;
//第一行
row = sheet.CreateRow();//在工作表中添加一行
ICell cell = row.CreateCell();//在行中添加一列
cell.SetCellValue("商品采购入库单");//设置列的内容
setCellStyle(workbook, cell);
mergeCell(sheet, , , , ); //合并单元格 ICellStyle style = workbook.CreateCellStyle();

//第二行
row = sheet.CreateRow();
row.CreateCell();
sheet.GetRow().GetCell().SetCellValue("供货单位:"); row.CreateCell();
sheet.GetRow().GetCell().SetCellValue(txt_unitname.Text); row.CreateCell();
sheet.GetRow().GetCell().SetCellValue((Convert.ToDateTime(dp_datetime.Text)).ToString("yyyy年MM月dd日"));

//第三行 row = sheet.CreateRow(); //循环添加表头
for (int i = ; i < dgv2.ColumnCount; i++)
{
row.CreateCell(i);
sheet.GetRow().GetCell(i).SetCellValue(dgv2.Columns[i].HeaderText);
//边框
style.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
style.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
style.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
style.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
style.BottomBorderColor = HSSFColor.BLACK.index;
style.LeftBorderColor = HSSFColor.BLACK.index;
style.RightBorderColor = HSSFColor.BLACK.index;
style.TopBorderColor = HSSFColor.BLACK.index;
row.GetCell(i).CellStyle = style; //规定单元格加边框
} for (int i = ; i <= dgv2.Rows.Count; i++)
{
row = sheet.CreateRow(i + );
for (int j = ; j < dgv2.ColumnCount; j++)
{
row.CreateCell(j);
string str = dgv2.Rows[i - ].Cells[j].Value.ToString();
sheet.GetRow(i + ).GetCell(j).SetCellValue(str);
style.BorderBottom = NPOI.SS.UserModel.BorderStyle.THIN;
style.BorderLeft = NPOI.SS.UserModel.BorderStyle.THIN;
style.BorderRight = NPOI.SS.UserModel.BorderStyle.THIN;
style.BorderTop = NPOI.SS.UserModel.BorderStyle.THIN;
style.BottomBorderColor = HSSFColor.BLACK.index;
style.LeftBorderColor = HSSFColor.BLACK.index;
style.RightBorderColor = HSSFColor.BLACK.index;
style.TopBorderColor = HSSFColor.BLACK.index;
row.GetCell(j).CellStyle = style;
}
}
row = sheet.CreateRow(dgv.Rows.Count + ); row.CreateCell();
sheet.GetRow(dgv.Rows.Count + ).GetCell().SetCellValue("财务审核:"); row.CreateCell();
sheet.GetRow(dgv.Rows.Count + ).GetCell().SetCellValue(cb_auditing.Text); row.CreateCell();
sheet.GetRow(dgv.Rows.Count + ).GetCell().SetCellValue("实物负责人:"); row.CreateCell();
sheet.GetRow(dgv.Rows.Count + ).GetCell().SetCellValue(dgv.Rows[].Cells[].Value.ToString()); row.CreateCell();
sheet.GetRow(dgv.Rows.Count + ).GetCell().SetCellValue("制单人:"); row.CreateCell();
sheet.GetRow(dgv.Rows.Count + ).GetCell().SetCellValue(dgv.Rows[].Cells[].Value.ToString()); // 存储路径弹框选择
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
saveDialog.FileName = output;
saveDialog.ShowDialog();
output = saveDialog.FileName;
if (output.IndexOf(":") < ) return; //被点了取消
if (output != "")
{
try
{
file = File.OpenWrite(saveDialog.FileName);
workbook.Write(file);
//file.Close();
//MessageBox.Show("导出成功!");
}
catch (Exception ex)
{
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
} }
} finally
{
if (file != null)
file.Close();
GC.SuppressFinalize(this);
} }

2.合并单元格、设置字体

   private void mergeCell(ISheet sheet, int firstRow, int lastRow, int firstCell, int lastCell)
{
sheet.AddMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCell, lastCell));//2.0使用 2.0以下为Region
} private void setCellStyle(HSSFWorkbook workbook, ICell cell)
{
HSSFCellStyle fCellStyle = (HSSFCellStyle)workbook.CreateCellStyle();
HSSFFont ffont = (HSSFFont)workbook.CreateFont();
ffont.FontHeight = * ;
ffont.FontName = "宋体";
fCellStyle.SetFont(ffont); fCellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.CENTER;//垂直对齐
fCellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.CENTER;//水平对齐
cell.CellStyle = fCellStyle;
}

附加( 使用Microsoft.Office.Interop.Excel 导出Excel表格)

  private void ExportExcels(string fileName, DataGridView myDGV)
{
string saveFileName = "";
SaveFileDialog saveDialog = new SaveFileDialog();
saveDialog.DefaultExt = "xls";
saveDialog.Filter = "Excel文件|*.xls";
saveDialog.FileName = fileName;
saveDialog.ShowDialog();
saveFileName = saveDialog.FileName;
if (saveFileName.IndexOf(":") < ) return;被点了取消
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
return;
} Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[];//取得sheet1 DataTable dtNew = new DataTable(); dtNew.Columns.Add(new DataColumn("id", typeof(object)));
dtNew.Columns.Add(new DataColumn("datetime", typeof(object)));
dtNew.Columns.Add(new DataColumn("purchase_unit", typeof(object)));
dtNew.Columns.Add(new DataColumn("specifications", typeof(object)));
dtNew.Columns.Add(new DataColumn("unit", typeof(object)));
dtNew.Columns.Add(new DataColumn("number", typeof(object)));
dtNew.Columns.Add(new DataColumn("price", typeof(object)));
dtNew.Columns.Add(new DataColumn("money", typeof(object)));
dtNew.Columns.Add(new DataColumn("payment", typeof(object)));
dtNew.Columns.Add(new DataColumn("remain", typeof(object))); for (int i = ; i < dgv.Rows.Count; i++)
{
DataRow dr = dtNew.NewRow(); dr["id"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["datetime"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["purchase_unit"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["specifications"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["unit"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["number"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["price"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["money"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["payment"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? "");
dr["remain"] = Convert.ToString(dgv.Rows[i].Cells[].Value ?? ""); dtNew.Rows.Add(dr);
}
dgv2.DataSource = dtNew;
Excel.Range titleRange = worksheet.Range[worksheet.Cells[, ], worksheet.Cells[, ]];//选取单元格
titleRange.Merge(true);//合并单元格
titleRange.Value2 = "其它商品销售明细汇总表";设置单元格内文本
titleRange.Font.Name = "宋体";//设置字体
titleRange.Font.Size = ;//字体大小
titleRange.Font.Bold = false;//加粗显示
titleRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中
titleRange.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;//垂直居中
titleRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;//设置边框
titleRange.Borders.Weight = Excel.XlBorderWeight.xlThin;//边框常规粗细 Excel.Range title_unitname = worksheet.Range[worksheet.Cells[, ], worksheet.Cells[, ]];//选取单元格
title_unitname.Merge(false);//合并单元格
title_unitname.Value2 = "商品名称:";设置单元格内文本
title_unitname.Font.Name = "宋体";//设置字体
title_unitname.Font.Size = ;//字体大小 Excel.Range title_unitname2 = worksheet.Range[worksheet.Cells[, ], worksheet.Cells[, ]];//选取单元格
title_unitname2.Merge(false);//合并单元格
title_unitname2.Value2 = txt_commname.Text;设置单元格内文本
title_unitname2.Font.Name = "宋体";//设置字体
title_unitname2.Font.Size = ;//字体大小 Excel.Range title_datetime = worksheet.Range[worksheet.Cells[, ], worksheet.Cells[, ]];//选取单元格
title_datetime.Merge(true);//合并单元格
title_datetime.Value2 = (Convert.ToDateTime(dp_datetime1.Text)).ToString("yyyy年MM月dd日");设置单元格内文本
title_datetime.Font.Name = "宋体";//设置字体
title_datetime.Font.Size = ;//字体大小 Excel.Range title_z = worksheet.Range[worksheet.Cells[, ], worksheet.Cells[,]];//选取单元格
title_z.Merge(true);//合并单元格
title_z.Value2 = "至";设置单元格内文本
title_z.Font.Name = "宋体";//设置字体
title_z.Font.Size = ;//字体大小
title_z.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中 Excel.Range title_datetime2 = worksheet.Range[worksheet.Cells[, ], worksheet.Cells[,]];//选取单元格
title_datetime2.Merge(true);//合并单元格
title_datetime2.Value2 = (Convert.ToDateTime(dp_datetime2.Text)).ToString("yyyy年MM月dd日");设置单元格内文本
title_datetime2.Font.Name = "宋体";//设置字体
title_datetime2.Font.Size = ;//字体大小 for (int i = ; i < dgv2.ColumnCount; i++)
{
worksheet.Cells[, i + ] = dgv.Columns[i].HeaderText;
Excel.Range title_dgv = worksheet.Range[worksheet.Cells[, i + ], worksheet.Cells[, i + ]];
title_dgv.Merge(false);//合并单元格
title_dgv.Value2 = dgv2.Columns[i].HeaderText;设置单元格内文本
title_dgv.Font.Name = "宋体";//设置字体
title_dgv.Font.Size = ;//字体大小
title_dgv.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;//设置边框
title_dgv.Borders.Weight = Excel.XlBorderWeight.xlThin;//边框常规粗细
}
写入数值
for (int r = ; r < dgv2.Rows.Count; r++)
{
for (int i = ; i < dgv2.ColumnCount; i++)
{
Excel.Range title_dgvT = worksheet.Range[worksheet.Cells[r + , i + ], worksheet.Cells[r + , i + ]];
worksheet.Cells[r + , i + ] = dgv.Rows[r].Cells[i].Value;
title_dgvT.Merge(false);//合并单元格
title_dgvT.Value2 = dgv2.Rows[r].Cells[i].Value;设置单元格内文本
title_dgvT.Font.Name = "宋体";//设置字体
title_dgvT.Font.Size = ;//字体大小
title_dgvT.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;//设置边框
title_dgvT.Borders.Weight = Excel.XlBorderWeight.xlThin;//边框常规粗细
}
System.Windows.Forms.Application.DoEvents();
} Excel.Range title_auditing = worksheet.Range[worksheet.Cells[dgv.Rows.Count + , ], worksheet.Cells[dgv.Rows.Count + , ]];//选取单元格
title_auditing.Merge(false);//合并单元格
title_auditing.Value2 = "会计:";设置单元格内文本
title_auditing.Font.Name = "宋体";//设置字体
title_auditing.Font.Size = ;//字体大小 Excel.Range title_auditing2 = worksheet.Range[worksheet.Cells[dgv.Rows.Count + , ], worksheet.Cells[dgv.Rows.Count + , ]];//选取单元格
title_auditing2.Merge(false);//合并单元格
title_auditing2.Value2 = dgv.Rows[].Cells[].Value;设置单元格内文本
title_auditing2.Font.Name = "宋体";//设置字体
title_auditing2.Font.Size = ;//字体大小 worksheet.Cells[dgv.Rows.Count + , ] = "财务审核:" + cb_auditing.Text; Excel.Range title_docm = worksheet.Range[worksheet.Cells[dgv.Rows.Count + , ], worksheet.Cells[dgv.Rows.Count + , ]];//选取单元格
title_docm.Merge(false);//合并单元格
title_docm.Value2 = "制单人:";设置单元格内文本
title_docm.Font.Name = "宋体";//设置字体
title_docm.Font.Size = ;//字体大小 Excel.Range title_docm2 = worksheet.Range[worksheet.Cells[dgv.Rows.Count + , ], worksheet.Cells[dgv.Rows.Count + , ]];//选取单元格
title_docm2.Merge(false);//合并单元格
title_docm2.Value2 = dgv.Rows[].Cells[].Value;设置单元格内文本
title_docm2.Font.Name = "宋体";//设置字体
title_docm2.Font.Size = ;//字体大小
worksheet.Cells[dgv.Rows.Count + , ] = "制单人:" + dgv.Rows[].Cells[].Value; worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
if (saveFileName != "")
{
try
{
workbook.Saved = true;
workbook.SaveCopyAs(saveFileName);
}
catch (Exception ex)
{
MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
}
}
xlApp.Quit();
GC.Collect();//强行销毁
MessageBox.Show("文件: " + fileName + ".xls 保存成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

NPOI_winfrom导出Excel表格(一)(合并单元格、规定范围加外边框、存储路径弹框选择)的更多相关文章

  1. C# 如何使用NPOI操作Excel以及读取合并单元格等

    C#操作Excel方法有很多,以前用的需要电脑安装office才能用,但因为版权问题公司不允许安装office.所以改用NPOI进行Excel操作,基本上一些简单的Excel操作都没有问题,读写合并单 ...

  2. NPOI_winfrom导出Excel表格(二)(直接打开Excel软件,将数据填充在当前的sheet中)

    //// 存储路径弹框选择 SaveFileDialog saveDialog = new SaveFileDialog(); saveDialog.DefaultExt = "xls&qu ...

  3. C# 获取Excel中的合并单元格

    C# 获取Excel中的合并单元格 我们在制作表格时,有时经常需要合并及取消合并一些单元格.在取消合并单元格时需要逐个查找及取消,比较麻烦.这里分享一个简单的方法来识别Excel中的合并单元格,识别这 ...

  4. JS动态生成表格后 合并单元格

    JS动态生成表格后 合并单元格 最近做项目碰到表格中的单元格合并的问题,需求是这样的,首先发ajax请求 请求回来后的数据 动态生成表格数据,但是生成后如果编号或者(根据其他的内容)有相同时,要合并单 ...

  5. java使用freemarker模板导出word(带有合并单元格)文档

    来自:https://blog.csdn.net/qq_33195578/article/details/73790283 前言:最近要做一个导出word功能,其实网上有很多的例子,但是我需要的是合并 ...

  6. 【转载】jxl操作excel 字体 背景色 合并单元格 列宽等 .

    package com.email.jav; import java.io.File;import java.io.IOException;import java.net.URL; import jx ...

  7. layui:数据表格如何合并单元格

    layui.use('table', function () { var table = layui.table; table.render({ elem: '#applyTab' , url: '$ ...

  8. Excel表格如何保护单元格不被修改

    Excel如何保护单元格不被修改  有时使用Excel时希望保护单元格不被修改,这可以叫做单元格的“写保护”即把光标定位在一个不允许输入数据的区域内时,是无论如何也无法在里面输入数据的.下面咱们就一起 ...

  9. 填报表导出excel非可写单元格锁定问题

     问题描述: 填报表单元格分为可写和不可写两种状态,当填报表在web上展现的时候可写单元格可以进行数据填报和修改,非可写单元格不可操作. 报表导出为excel时,润乾导出excel包默认情况下不对 ...

随机推荐

  1. FreeMarker学习(内建函数参考)

    内容参考:http://freemarker.foofun.cn/dgui_quickstart_basics.html 一.字符串内建函数 boolean: 字符串转为布尔值.字符串必须是 true ...

  2. 百度地图API--百度地图底色选择

    可选择底色列表<select id="stylelist" onchange="changeMapStyle(this.value)"> <o ...

  3. Django admin site应用

    django自带的admin后台管理,可以实现对数据库表的增删改查,用起来十分方便.其使用和配置主要分为三个步骤: 1,创建超级用户 需要创建超级用户来登陆admin后台系统,在命令行中输入 pyth ...

  4. Spring数据分析思维课

    本文目录 一.杂 二.四大行业数据分析 1.工具 1.电商数据分析——以京东为例 2.sql常见问题   2.互联网金融——以芝麻信用为例 3.数据异常排查 3.游戏行业——以欢乐斗地主为例 4.融入 ...

  5. Python3+RobotFramewok 快速入门(二)

    1. 原理 首先解释一下RF的工作原理,官方文档介绍就不赘述了,笔者就框架架构做出一个更加具体的描述 测试套及测试用例集(Test Data即需要用户编写的脚本)通过RF特定的语法解析,然后知道用户要 ...

  6. spring cloud之Eureka不能注销docker部署的实例

    1 起因 事件的起因是这样的,我们在微服务改造的过程中,选择将服务注册到eureka中,开发的时候还好,使用场景是这样的: 在idea中启动服务,成功注册到eureka,关闭服务,eureka成功注销 ...

  7. [jquery]JSON.parse()与JSON.stringify()

    JSON.parse()[从一个字符串中解析出json对象] 例子: //定义一个字符串 var data='{"name":"goatling"}' //解析 ...

  8. partprobe 和 partx 的用法

    partprobe: 用于重读分区表,当出现删除文件后,出现仍然占用空间.可以partprobe在不重启的情况下重读分区. 将磁盘分区表变化信息通知内核,请求操作系统重新加载分区表. -d 不更新内核 ...

  9. 图解Go协程调度原理,小白都能理解

    阅读本文仅需五分钟,golang协程调度原理,小白也能看懂,超实用. 什么是协程 对于进程.线程,都是有内核进行调度,有CPU时间片的概念,进行抢占式调度.协程,又称微线程,纤程.英文名Corouti ...

  10. MySQL知识点系统总结

    MySQL数据库是一个非常流行的关系型数据库.配合Linux.PHP.Apache,简称lamp,是一般个人企业网站的首选.MySQL用起来不难,要系统的用好,可不是一件简单的事.于是PHP程序员雷雪 ...