C# API: 生成和读取Excel文件
我们想为用户提供一些数据,考虑再三, 大家认为对于用户(人,而非机器)的可读性, Excel文件要好一些.
因为相比csv,xml等文件, Excel中我们可以运用自动筛选, 窗口锁定, 还可以控制背景颜色, 前景颜色, 字体, 网格等等...
业务逻辑并不复杂, 文件的内容和格式也比较固定,所以大家决定直接拿C#去创建这些文件.
于是一搜索,首先来到了这个链接:C# Excel Tutorial
里面包含了下面这些主题的代码示例, 示例很详细, 编译可直接运行.
- How to create Excel file in C#
- How to open an Excel file in C#
- How to read an Excel file in CSharp
- How to format an Excel file using C#
- How to insert a picture in excel from C# App
- How to insert a background picture in excel
- How to create Excel Chart from C#
- How to export excel chart from C#
- How to excel chart in C# picturebox
- C# data validation input box in excel file
- How to read from an Excel file using OLEDB
- How to insert data to Excel file using OLEDB
- How to update data in Excel file using OLEDB
- How to export databse to excel file
- How to export DataGridView to excel file
为了理解上面这些代码需要理解一下Excel的对象模型, 可以参考msdn的下面这个链接
里面介绍了4个核心对象:
前三个对象比较好理解, 关键在于第四个对象:Range.
起初我以为更改一些单元格的字体颜色格式等等的, 是需要通过Cell这个对象来做.
看完了之后才发现, 这些操作其实都是通过Range来完成的.
还包括和并单元格, 设置网格线等等, 甚至读取和设置一个单元格的值,都可以通过Range来完成,
所以基本上当我们操作excel的时候, 我们最经常的就是和Range对象打交道, 而很少使用Cell等对象.
如果有什么需求不知道怎么实现,
建议可以先到Range对象里面翻一翻, 看看msdn上Range对象的Members,Methods,Properties的相关文档.
还有一点要补充的是:
不仅仅是C#, 还包括其他语言的Excel API, 都是对Excel对象模型的直接模拟和包装.不过Java,Ruby等等.
也就是说, 其他语言的Excel API也都会有上面那四个主要对象, 而且也都会以近乎相同的方式, 干着差不多的事儿.
接下来想写一写关于Missing.Value的事儿
对于前面给出的,创建Excel表的例子的代码, 转载如下:
这段代码中,很多函数调用都传递了这个参数:
object misValue = System.Reflection.Missing.Value;
他的详细介绍参考这个链接Missing Class 上面的例子,
简单的说就是:
当我想以一些参数的默认值来调用一些dll中的方法的, 我们在方法调用中忽略掉这些参数也不对,
我们用null传递给这些参数还不对,
这时我们便可以给这些参数赋值以Missing.Value来告诉运行时环境, 用这个参数的默认值帮我运行吧.
对于这段代码还有一个需要注意的问题:
注意Application,Workbook,Worksheet这三个对象的清理工作
该保存的保存, 该close的close, 该quit的quit, 最后, 他们还都应该被release
- using System;
- using System.Windows.Forms;
- using Excel = Microsoft.Office.Interop.Excel;
- namespace WindowsApplication1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- private void button1_Click(object sender, EventArgs e)
- {
- Excel.Application xlApp ;
- Excel.Workbook xlWorkBook ;
- Excel.Worksheet xlWorkSheet ;
- object misValue = System.Reflection.Missing.Value;
- xlApp = new Excel.ApplicationClass();
- xlWorkBook = xlApp.Workbooks.Add(misValue);
- xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
- xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
- xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
- xlWorkBook.Close(true, misValue, misValue);
- xlApp.Quit();
- releaseObject(xlWorkSheet);
- releaseObject(xlWorkBook);
- releaseObject(xlApp);
- MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");
- }
- private void releaseObject(object obj)
- {
- try
- {
- System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
- obj = null;
- }
- catch (Exception ex)
- {
- obj = null;
- MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
- }
- finally
- {
- GC.Collect();
- }
- }
- }
- }
最后想写一下关于如何设置字体的颜色, 以及单元格的背景颜色的事儿.
以背景色设置为红色为例, 首先我们可以写出形如下面这样的代码:
- Excel.Range chartRange;
- chartRange = xlWorkSheet.get_Range("a1", "e4");
- chartRange.Interior.Color = 255;
但是这个255很不好记, 比如青色对应的数字是16777164, 这个就更加不好理解.
所以我们可以改为这样设置颜色, 使用ColorTranslator转换一下:
- chartRange.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
最后还有一种设置方法是不对Color进行设置, 而是设置相应的ColorIndex, 形如下面这样:
- chartRange.Interior.ColorIndex = 3;
ColorIndex的色表参考下面这两个连接:
Color Palette and the 56 Excel ColorIndex Colors
Excel Color Palette and Color Index change using VBA
第一个连接特别详细,
第二个连接则介绍了如何使用VBA在Excel文件中生成这些色表, 同时还提供了一个xls格式的色表文件下载.
C# API: 生成和读取Excel文件的更多相关文章
- PHPExcel生成或读取excel文件
以下是详细代码示例: <?php /** * 以下是使用示例,对于以 //// 开头的行是不同的可选方式,请根据实际需要 * 打开对应行的注释. * 如果使用 Excel5 ,输出的内容应该是G ...
- C#读取excel文件,并生成json
这次介绍两种方法,第一种是安装AccessDatabaseEngine,第二种是利用Npoi读取excel 一.第一种利用AccessDatabaseEngine进行读取excel文件 1.安装Acc ...
- Java生成和操作Excel文件(转载)
Java生成和操作Excel文件 JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...
- Java生成和操作Excel文件
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
- 转帖 Java生成和操作Excel文件
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
- (转载)Java生成和操作Excel文件
JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...
- C# 读取EXCEL文件的三种经典方法
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...
- PHPExcel读取excel文件示例
PHPExcel读取excel文件示例PHPExcel最新版官方下载网址:http://phpexcel.codeplex.com/PHPExcel是一个非常方便生成Excel格式文件的类,官方下载包 ...
- ASP.NET读取EXCEL文件的三种经典方法(转)
1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:public DataSet ExcelToDS(string Path) { str ...
随机推荐
- 【转】Linux mount/unmount命令
转自:http://www.cnblogs.com/xd502djj/p/3809375.html 格式:mount [-参数] [设备名称] [挂载点] 其中常用的参数有:-a 安装在/etc/fs ...
- jquery的一些技巧总结
1.使用方法在需要使用JQuery的页面中引入JQuery的js文件即可.例如:<script type="text/javascript" src="js/jqu ...
- JDBC项目实践
这几天学习了JDBC的接口,从简单的连接,到不断地对JDBC的代码进行优化,最后到实体类,DAO类的设计,现在对这几天所学做一个总结: 首先是软件的系统组成: 数据库中有很多的表:Customer,D ...
- Ubuntu 16.04 Mxnet CPU 版本安装
在安装前配置好更新源,基本要求就是速度越快越好: 1.安装Python apt-get install python 2.安装Git apt-get install git 3.安装依赖包 ...
- 【转】Bellman_ford算法
原文链接:http://www.cnblogs.com/Jason-Damon/archive/2012/04/21/2460850.html 摘自百度百科 Bellman-ford算法是求含负权图的 ...
- (转载)OC学习篇之---类目的概念和使用
上一篇文章介绍了OC中的@class关键字的使用,这一篇我们介绍一下,OC中的一个特有的亮点:类目 首先我们来看一下场景,如果我们现在想对一个类进行功能的扩充,我们该怎么做? 对于面向对象编程的话,首 ...
- 关于面试mysql优化的几点纪要
1.减少查询次数 ,如何减少 ? 2. 表结构优化,如何优化 ? 3. 列选取原则 ? 4.建索引原则 ? 5.mysql语句优化 ? 6.增加mysql处理性能 ? 通过这几点, 再来说 ...
- httpcomponents 学习1--并发多线程GET
package org.apache.http.examples.client; import org.apache.http.HttpEntity; import org.apache.http.H ...
- 关于python requests包新版本设置代理的问题
在更新了requests包之后,发现我电脑上的charles工具无法再成功抓取到数据包.百度了半年都没有找到原因. 然后 我使用了 google 查到了 charles的最新的文档发现.需要设置代理, ...
- 第三百三十八天 how can I 坚持
下午去奥体森林公园跑了个步,好累. 晚上和徐斌同学一起吃了个饭,接触了下杨辉三角,还没整明白,明天看下. 突然想起java 编译,ant脚本. 要精通门技术,还要赶上潮流. 睡觉.