C# Excel控件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# Excel控件相关的知识,希望对你有一定的参考价值。
找一个Excel控件,我用的是VS2005,需要在WinForm窗体上添加一个Excel控件,希望能麻烦各位帮忙找一个,如果有使用文档就更好了。我的邮箱是pengpei_gg@126.com 谢谢大家了!!
FarPointSpread简介
FarPoint Spread是一个高级的电子表格COM组件,在单元格级上提供无比强大的灵活性,可最大化控制数据的显示和录入,并提供大量的事件响应用户的操作。FarPoint Spread提供导入导出功能,包括能够导入导出Excel 97和2000文件格式;增强的打印,多种单元格类型,计算公式,一个64bit的DLL等。FarPoint Spread将允许你创建一个多达20亿行和20亿列的电子表格。
全球最强的报表第三方控件
FarPoint Spread V8.0的最新特征?
新的计算函数
能够创建自定义单元格
一个64-bit DLL
用于注解的图形形状和色彩
新的OCX方法用于从缓冲保存和装入
新的事件用于循环参考
增强的外观
表头和Sheet的外观增强
滚动条的外观增强
sheet tabs的外观增强
选中高亮增强
当导出到html提供额外的选项
使用control-click应用第二次排序
FarPoint Spread V7.0的新特征?
多Sheet支持
跨Sheet计算参考
支持Unicode
内建支持行列移动
新的科学符号单元格类型
增强的数字格式化
更快的排序
更稳定的Spread Designer
自定义滚动条的颜色,宽度和高度
双击表头自动调整列宽到文本的宽度
可放缩的打印
放缩适合页面的打印
水平中心和垂直中心打印
页眉/注脚的控制字符(如 /time,/date)
增强对图像类型的支持包括.gif和.jpg
支持展开的文本提示(允许大于1000字符)
当装入文件时LoadTextFile缺省至32,000个字符
当单元格获取焦点时,可隐藏/显示焦点方块
当使用EditModePermanent时自动定位光标
可转换的列标签(字母到数字和数字到字母)
按钮单元格的文本和图像对齐
最大列宽计算能够包括按钮单元格
刷新数据集不影响表头
复选框单元格有类似Windows的外观
滚动条提示事件
当所有数据从数据库装入完成时触发DataLoaded
FarPoint Spread通用特征:
创建一个多达20亿行和20亿列的电子表格
在电子表格中任意拖放数据
用剪贴板copy/cut/paste,并支持快捷键
通过锁定单元格数据防止数据编辑
通过允许单元格数据溢出到相邻单元格创建表头
冻结最顶层的行或最左边的列滚动,使某些数据在任何时候都被浏览
导入和导出Microsoft Excel BIFF8格式的电子表格文件
使用操作模式,设置表格为只读,或让它作为单选或多选的列表框
使用33个Action属性执行任务,包括保存和打印电子表格
单元格格式化
每个单元格最多显示32K的数据
通过改变任何单元的字体和背景色自定义你的界面
用6种边框风格高亮任何单元格或单元格块
用12种单元格类型提供最流行的数据和数据库格式
按钮:单元格中显示一个push button,包括文本,图形或两者都包括
复选框:单元格中显示一个复选框,或图片,允许true,false,或者灰度状态
组合框:单元格中显示一个下拉下拉列表框
日期:显示或允许编辑格式化的日期
支持Year 2000
编辑控件:显示或允许编辑单元格的文本
浮动: 显示或允许编辑格式化的浮点值
格式化的PIC: 显示或允许编辑格式化的PIC值
整数: 显示或允许编辑整数值
自绘: 用WindowsAPI显示用户定义图片
图片: 单元格中显示图片(.bmp或.ico)文件格式
静态文本: 单元格中显示不可编辑不可滚动的文本
时间: 显示或允许编辑时间格式的值
支持可自定义化的打印及预览
提供强大的计算引擎
支持数据绑定
强大的表格设计器(Spread Designer)
以上供参考 参考技术A 没有所谓的Excel控件,
你可以把Excel的数据显示在DataGridView里,
就是想在画面上嵌入一个Excel的话,
这个最适合你的情况了:
如何使用 WebBrowser 控件在 Visual C# 2005 或 Visual C# .NET 中打开 Office 文档
http://support.microsoft.com/kb/304662
参考资料:http://support.microsoft.com/kb/304662
参考技术B正在使用中:C1ExcelBook 组件
参考技术C C#连接Excel的方法与连接Access的方法类似,同样可以使用OldDBConnection,如下:String excelPath = "你的Excel文件绝对路径";
ConnectionString = @"Provider=Microsoft.Jet.OleDb.4.0;Data Source=" + excelPath + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
数据库连接好后就是查询,查询的方法跟Asscess一样只是Excel的表面后面都需要加上一个’$'字符.比如:
DataTable tempDataTable = new DataTable();
String strSql = "SELECT * FROM [sheet1$]";
DataAdapter da = new OleDbDataAdapter(strSql, myConnection);
da.Fill(tempDataTable);
参考资料:http://www.zhongsisi.com/?p=493
参考技术D 有一个FarPoint的很不错,不只excel,pdf什么的都有,你可以自己去网上搜索一下,参考:http://blog.sina.com.cn/s/blog_609666090100emj0.html参考资料:http://blog.sina.com.cn/s/blog_609666090100emj0.html
.Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
最近项目中需要一个导出Excel报告的功能,假期搜了一下,把其中比较主流的列一下,仅供参考。
功能需求:
- 创建并写入.xlsx Excel2007+版本的电子表格文件
- 不需要office组件支持,终端电脑无需安装ms office
- 简单的format,style,chart和formula支持(不用过于复杂),并且能够插入图片
- 速度,保证数据在万行以上表格写入速度
效果图:
一、ClosedXML
主页:https://github.com/ClosedXML/ClosedXML
需要引用OpenXMLSDK(DocumentFormat.OpenXml.dll),以简易面向对象的方式操作文件(类似Visual Basic for Applications (VBA)),文档和例子都比较完善
//创建workbook using (var wb = new XLWorkbook(XLEventTracking.Disabled)) { //设置默认Style var style = wb.Style; style.Font.FontName = "Microsoft YaHei"; style.Font.FontSize = 11; //添加Sheets var ws = wb.Worksheets.Add("Sheet001"); wb.Worksheets.Add("Sheet002"); //手动cell赋值 ws.Cell(1, 1).Value = "Project"; ws.Cell(1, 2).Value = "Project001"; ws.Cell("A2").Value = "User"; ws.Cell("B2").Value = "User001"; ws.Cell(3, 1).SetValue("Create Date"); ws.Cell(3, 2).SetValue(DateTime.Now); //加重第一列文字 var rngHeader = ws.Range(1, 1, 3, 1); rngHeader.Style .Font.SetBold() .Font.SetFontColor(XLColor.White) .Fill.SetBackgroundColor(XLColor.SkyBlue) .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); //合并cell ws.Cell(5, 1).Value = "Data List"; var rngTitle = ws.Range(5, 1, 5, 5); rngTitle.Merge();//ws1.Row(5).Merge(); rngTitle.Style .Font.SetBold() .Font.SetFontSize(15) .Alignment.SetHorizontal(XLAlignmentHorizontalValues.Center); //插入表格或数据,设置Timespan format var fakeData = Enumerable.Range(1, 5) .Select(x => new FakeData { Time = TimeSpan.FromSeconds(x * 123.667), X = x, Y = -x, Address = "a" + x, Distance = x * 100 }).ToArray(); var table = ws.Cell(6, 1).InsertTable(fakeData); table.Style.Font.FontSize = 9; var data = ws.Cell(13, 1).InsertData(fakeData); data.Style.Font.FontSize = 9; ws.Range(7, 1, 18, 1).Style.DateFormat.Format = "HH:mm:ss.000"; //插入图片 var image = ws.AddPicture("1.png"); image.MoveTo(ws.Cell(19, 1).Address); image.Scale(0.3); //调整列距 ws.Columns().AdjustToContents();//会花费写入数据一倍的时间 //保存文件 wb.SaveAs("ClosedXML.xlsx"); }
二、EPPlus
主页:https://github.com/JanKallman/EPPlus/
EPPlus不需要任何别的引用,文档和例子还算比较全
//创建workbook using (var p = new ExcelPackage()) { //添加Sheets var ws= p.Workbook.Worksheets.Add("Sheet001"); p.Workbook.Worksheets.Add("Sheet002"); //手动cell赋值 ws.Cells[1,1].Value = "Project"; ws.Cells[1, 2].Value = "Project001"; ws.Cells["A2"].Value = "User"; ws.Cells["B2"].Value = "User001"; ws.Cells[3,1].Value = "Create Date"; ws.Cells[3,2].Value = DateTime.Now; ws.Cells[3, 2].Style.Numberformat.Format = "YYYY/MM/DD"; //加重第一列文字 var rngHeader = ws.Cells[1, 1, 3, 1]; rngHeader.Style.Font.Bold = true; rngHeader.Style.Font.Color.SetColor(System.Drawing.Color.White); rngHeader.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; rngHeader.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.DodgerBlue); rngHeader.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center; //合并cell ws.Cells[5, 1].Value = "Data List"; var rngTitle = ws.Cells[5, 1, 5, 5]; rngTitle.Merge = true; rngTitle.Style.Font.Size = 15; rngTitle.Style.Font.Bold = true; rngTitle.Style.HorizontalAlignment = OfficeOpenXml.Style.ExcelHorizontalAlignment.Center; //插入表格或数据,设置Timespan format var fakeData = Enumerable.Range(1, 5) .Select(x => new FakeData { Time = TimeSpan.FromSeconds(x * 123.667), X = x, Y = -x, Address = "a" + x, Distance = x * 100 }).ToArray(); ws.Cells[6, 1].LoadFromCollection(fakeData, true, OfficeOpenXml.Table.TableStyles.Medium27); ws.Cells[13, 1].LoadFromArrays( fakeData.Select(x => new object[] {x.Time, x.X, x.Y, x.Address, x.Distance})); ws.Cells[6, 1, 18, 1].Style.Numberformat.Format = "HH:mm:ss.000"; //插入图片 var image = ws.Drawings.AddPicture("picture", new FileInfo("1.png")); image.From.Row = 19; image.From.Column = 0; image.SetSize(30); //设置默认Style ws.Cells[ws.Dimension.Address].Style.Font.Name = "Microsoft YaHei"; //调整列距 ws.Cells.AutoFitColumns(0);//会花费写入数据一倍的时间 //保存文件 p.SaveAs(new FileInfo("EPPlus.xlsx")); }
三、NPOI
官网:https://github.com/tonyqus/npoi .netcore version:https://github.com/dotnetcore/NPOI
需要引用SharpZipLib,可以读写Word和Excel,例子比较全,系统点的文档没有找到,不过是国人的开源项目,百度应该能找到很多
参考:
http://blog.csdn.net/pan_junbiao/article/details/39717443
http://www.cnblogs.com/yinrq/p/5590970.html
http://www.cnblogs.com/hanzhaoxin/p/4232572.html 基于NPIO的Report控件
using (var fs = new FileStream("NPOI.xlsx", FileMode.Create, FileAccess.Write)) { //创建workbook IWorkbook wb = new XSSFWorkbook(); //添加Sheets var ws = wb.CreateSheet("Sheet001"); wb.CreateSheet("Sheet002"); //手动cell赋值 ws.CreateRow(0).CreateCell(0).SetCellValue("Project"); ws.CreateRow(0).CreateCell(1).SetCellValue("Project001"); ws.CreateRow(1).CreateCell(0).SetCellValue("User"); ws.CreateRow(1).CreateCell(1).SetCellValue("User001"); ws.CreateRow(2).CreateCell(0).SetCellValue("Create Date"); ws.CreateRow(2).CreateCell(1).SetCellValue(DateTime.Now); wb.Write(fs); }
四、Benchmarks
以上三个控件的简单测试,10000条数据写入
using (var wb = new XLWorkbook(XLEventTracking.Disabled)) { var ws = wb.AddWorksheet("1"); ws.Column(1).Style.DateFormat.Format = "HH:mm:ss.000"; int rowCount = 1; foreach (var fakeData in data) { rowCount++; ws.Cell(rowCount, 1).Value = fakeData.Time; ws.Cell(rowCount, 2).Value = fakeData.X; ws.Cell(rowCount, 3).Value = fakeData.Distance; ws.Cell(rowCount, 4).Value = fakeData.Address; } wb.SaveAs("ClosedXML.xlsx"); } using (var wb = new ExcelPackage()) { var ws = wb.Workbook.Worksheets.Add("1"); ws.Column(1).Style.Numberformat.Format = "HH:mm:ss.000"; ws.Cells[1, 1].LoadFromCollection(data,true, OfficeOpenXml.Table.TableStyles.Medium2, System.Reflection.BindingFlags.Public|System.Reflection.BindingFlags.Instance, new System.Reflection.MemberInfo[] { typeof(FakeData).GetProperty("Time"), typeof(FakeData).GetProperty("X"), typeof(FakeData).GetProperty("Distance"), typeof(FakeData).GetProperty("Address") }); wb.SaveAs(new FileInfo("EPPlus.xlsx")); } using (var fs = new FileStream("NPOI.xlsx", FileMode.Create, FileAccess.Write)) { var wb = new XSSFWorkbook(); var ws = wb.CreateSheet("1"); int rowCount = 0; IRow row; foreach (var fakeData in data) { row = ws.CreateRow(rowCount++); row.CreateCell(0).SetCellValue(fakeData.Time.ToString(@"hh\\:mm\\:ss\\.fff")); row.CreateCell(1).SetCellValue(fakeData.X); row.CreateCell(2).SetCellValue(fakeData.Distance); row.CreateCell(3).SetCellValue(fakeData.Address); } wb.Write(fs); }
BenchmarkDotNet=v0.10.9, OS=Windows 10 Redstone 2 (10.0.15063)
Processor=Intel Core i7-6700K CPU 4.00GHz (Skylake), ProcessorCount=8
Frequency=3914068 Hz, Resolution=255.4887 ns, Timer=TSC
[Host] : .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2110.0
Job-EJASFH : .NET Framework 4.7 (CLR 4.0.30319.42000), 32bit LegacyJIT-v4.7.2110.0
Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Gen 2 | Allocated |
---|---|---|---|---|---|---|---|
ClosedXML | 337.6 ms | NA | 2.5647 ms | 9625.0000 | 7062.5000 | 2812.5000 | 47.26 MB |
EPPlus | 145.8 ms | NA | 0.2533 ms | 5000.0000 | 3250.0000 | 2000.0000 | 24.68 MB |
NPOI | 263.4 ms | NA | 5.8716 ms | 10500.0000 | 7343.7500 | 2375.0000 | 55.65 MB |
总体上EPPlus在速度和内存上都最佳,感觉ClosedXML在API调用上方便一些,文档写全面一些。
五、其他
SpreadSheetLight 之前项目使用的,读写都可以,需要OpenXMLSDK 2.5
ExcelDataReader Excel 03-07 文件读取,只需要快速读取excel文件的可以用这个
以上是关于C# Excel控件的主要内容,如果未能解决你的问题,请参考以下文章