WinForm中导出Excel
通过传入不同的数据集来控制Excel中sheet的数目,此例依照两个为例,仅供大家参考:
#region 導出Excel
private void outPutExcel(System.Data.DataTable dt, System.Data.DataTable dt2)
{
if (dt == null) return;
Excel.Application xlApp = new Excel.Application();
if (xlApp == null)
{
//clsLog.m_CreateErrorLog("无法创建Excel对象,可能计算机未安装Excel", "", "");
return;
}
//創建Excel對象
Excel.Workbooks workbooks = xlApp.Workbooks;
Excel.Workbook workbook = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
//Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
Excel.Worksheet worksheet = null;
for (int sheetcount = 0; sheetcount < 2; sheetcount++)//循环根据自己需要的sheet的数目这里是两个
{
if (worksheet == null)
{
worksheet = (Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, Type.Missing, 1, Type.Missing);
}
else
{
worksheet = (Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, worksheet, 1, Type.Missing);
}
Excel.Range range = null;
if (sheetcount == 0)
{
long totalCount = dt.Rows.Count;
long rowRead = 0;
float percent = 0;
worksheet.Name = "明細資料一";//第一个sheet在Excel中显示的名称
写入标题
for (int i = 0; i < dt.Columns.Count; i++)
{
worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
range = (Excel.Range)worksheet.Cells[1, i + 1];
range.Interior.ColorIndex = 15;//背景颜色
range.Font.Bold = true;//粗体
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//居中
//加边框
range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);
range.ColumnWidth = 4.63;//设置列宽
range.EntireColumn.AutoFit();//自动调整列宽
//r1.EntireRow.AutoFit();//自动调整行高
}
//写入内容
for (int r = 0; r < dt.Rows.Count; r++)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i];
range = (Excel.Range)worksheet.Cells[r + 2, i + 1];
range.Font.Size = 9;//字体大小
//加边框
range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);
range.EntireColumn.AutoFit();//自动调整列宽
}
rowRead++;
percent = ((float)(100 * rowRead)) / totalCount;
}
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;
if (dt.Columns.Count > 1)
{
range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;
}
}
else if (sheetcount == 1)
{
long totalCount = dt2.Rows.Count;
long rowRead = 0;
float percent = 0;
worksheet.Name = "建議解決方案";
写入标题
for (int i = 0; i < dt2.Columns.Count; i++)
{
worksheet.Cells[1, i + 1] = dt2.Columns[i].ColumnName;
range = (Excel.Range)worksheet.Cells[1, i + 1];
range.Interior.ColorIndex = 15;//背景颜色
range.Font.Bold = true;//粗体
range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//居中
//加边框
range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);
range.ColumnWidth = 14.63;//设置列宽
range.EntireColumn.AutoFit();//自动调整列宽
//r1.EntireRow.AutoFit();//自动调整行高
}
//写入内容
for (int r = 0; r < dt2.Rows.Count; r++)
{
for (int i = 0; i < dt2.Columns.Count; i++)
{
worksheet.Cells[r + 2, i + 1] = dt2.Rows[r][i];
range = (Excel.Range)worksheet.Cells[r + 2, i + 1];
range.Font.Size = 9;//字体大小
//加边框
range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);
range.EntireColumn.AutoFit();//自动调整列宽
}
rowRead++;
percent = ((float)(100 * rowRead)) / totalCount;
//System.Windows.Forms.Application.DoEvents();
}
range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight = Excel.XlBorderWeight.xlThin;
if (dt2.Columns.Count > 1)
{
range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight = Excel.XlBorderWeight.xlThin;
}
}
}
//下面是将Excel存储在服务器上指定的路径与存储的名称
try
{
string tPath = System.AppDomain.CurrentDomain.BaseDirectory;
if (!Directory.Exists(tPath + "Excel"))
{
Directory.CreateDirectory(tPath + "Excel");
}
workbook.SaveCopyAs(tPath + "Excel" + "\\" + System.DateTime.Today.ToString("yyyyMMdd") + pCompany + "测试.xls");
}
//writeLog("生成Exce附件成功!");//此处是我的一个方法,记录log讯息的
}
catch(Exception ex)
{
string strMsgErr = "生成Excel附件過程中出現異常,詳細信息如:" + ex.ToString();
//writeLog(strMsgErr);//这个也是写log档的
}
//我们导出Excel的时候会在进程中调用Excel进程,导出之后必须强制杀掉进程
try
{
if (xlApp != null)
{
int lpdwProcessId;
GetWindowThreadProcessId(new IntPtr(xlApp.Hwnd), out lpdwProcessId);
System.Diagnostics.Process.GetProcessById(lpdwProcessId).Kill();
}
}
catch (Exception ex)
{
Console.WriteLine("Delete Excel Process Error:" + ex.Message);
}
}
#endregion
到这里从数据库中导出Excel就完成了,并生成在相应的目录下。
这只是一个简单的导出方法,重点是我们要学会通过这个方法,将其运用到其他的导出Excel的功能需求中,这个时候我们需要做的可能有改变参数传入的个数,类型,等等。
之后我还会恭喜出,动态的从数据库中导出Excel,并将其作为发送邮件的附件发送到指定的接受人,以及将发送的邮件完成的保存成二进制文件或者XML文件,供我们追寻,如果发送失败的话,不需要重新生成所有的东西,只需调用保存的二进制文件或者XML文档即可完成重新发送邮件,方便快捷!
OK啦,今天就先说这么多啦!希望有更好的实现方法的朋友能够回复我,将你的资料共享出来!拜拜!
WinForm中导出Excel相关推荐
- Winform中导出Excel数据量百万级的处理办法-导出为csv文件
场景 Winform中通过NPOI导出Excel的三种方式(HSSFWorkbook,XSSFWorkbook,SXSSFWorkbook)附代码下载: https://blog.csdn.net/B ...
- c# winform html 表,C# winform中嵌入Excel实现复杂表格的显示和控制
龙源期刊网 http://www.doczj.com/doc/7c6e747d7375a417866f8fac.html C# winform中嵌入Excel实现复杂表格的显示和控制 作者:斯琴巴图杨 ...
- WinForm中使用Excel控件
最近项目中要在WinForm中使用Excel控件,经过几天的研究,现在总结一下成果. 在WinForm中使用Excel控件主要有三种方法:WebBrowser.DSOFramer.OWC.下面分别 ...
- Acey.ExcelX实例演练(1)—从GridView中导出Excel报表
Acey.ExcelX实例演练(1) -从GridView中导出Excel报表 关键词:GridView,数据绑定,Excel报表 在开发过程中我们经常遇到需要将页面中查看到的数据导出Excel的情况 ...
- .Net Core通过NPOI在CentOS 7(Docker)环境中导出Excel报错The type initializer for ‘Gdip‘ 的问题
一.前言 今天在AspNetCore5.0环境中做了一个导出Excel的功能,在开发机器上(windows10)调试正常,但是部署到centos7容器(容器基础环境mcr.microsoft.com/ ...
- java web中的导出excel_JAVA语言之怎么在JavaWeb中导出Excel
本文主要向大家介绍了JAVA语言之怎么在JavaWeb中导出Excel,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 怎么在JavaWeb中导出Excel? 代码自解释 1,依赖包 ...
- vue中导出Excel表格
vue中导出Excel表格 项目中我们可能会碰到导出Excel文件的需求,一般后台管理系统中居多,将table中展示的数据导出保存到本地.当然我们也可以通过一些处理来修改要导出的数据格式,具体需求具体 ...
- ag-grid-angular 中导出Excel表格 及其配置
ag-grid-angular 中导出Excel表 及其配置 api 常用params 详解 自定义页眉和页脚 定义样式 样式参数详解 api exportDataAsExcel(params) 常用 ...
- java poi设置单元格格式为数值_java中导出excel设置单元格的样式为数字格式怎么设置_Java代码实现设置单元格格式...
java中导出excel设置单元格的样式为数字格式怎么设置 如果是使用poi,它会自动根据参数值设置单元格为恰当格式,只需传入数字类型参数值即可,比如 double value=....; cell. ...
最新文章
- 20190429 照片里面的GPS信息确实会暴露经纬度
- 什么是带宽?—Vecloud微云
- virtualbox配置apache_virtualbox 网络配置 (转)
- TIM怎么显示每条信息的时间
- 微信小程序中相机api_微信小程序 Image API实例详解
- HP-Socket v5.4.4 发布,高性能跨平台网络通信框架
- 松下机器人找原点步骤_松下机器人操作规程2017
- matlab定义变量var,设置变量数据类型 - MATLAB setvartype
- MathWorks 中国
- mkfs.ext3 快速格式化_U盘数据快速恢复
- 在VMware Workstation中创建一个虚拟软盘,并在Windows XP上使用
- 华三模拟器命令(陆续更新)
- @RunWith的作用
- 传奇GOM引擎登录器配置教程
- 这些线上峰会为何不约而同选择亿联视讯方案?云端协同、流畅安全是关键!
- flex布局属性的伸展、收缩、基准属性
- 微信公众号开发---机器人
- 图片添加水印相关记录
- java license 验证方案,使用License3j实现简单的License验证
- STM32G070RBT6基于Arduino框架GPIO外部中断
- 年度重点家族盘点—PC僵尸网络家族
热门文章
- 中国电信叫停不限量套餐 套外资费3元/GB
- 有人抄袭微信红包和表情被罚了40万!这下“吹牛”可能牛不起来了
- 华为Mate 30 Pro就长这样了?前后六摄 这造型已看醉
- 春运公益片“情满回家路”上线 顺风车等出行方式再被呼吁
- 1.请求安全-- MD5的必要性以及实际应用场景
- Android实现图片的高效批量加载
- unix和linux的区别
- 虚拟机启动后链接超时
- 【java】java wait 原理 synchronized ReentrantLock 唤醒顺序
- 【ElasticSearch】Es 源码之 CleanerService 源码解读