们想为用户提供一些数据,考虑再三, 大家认为对于用户(人,而非机器)的可读性, Excel文件要好一些.
因为相比csv,xml等文件, Excel中我们可以运用自动筛选, 窗口锁定, 还可以控制背景颜色, 前景颜色, 字体, 网格等等...
业务逻辑并不复杂, 文件的内容和格式也比较固定,所以大家决定直接拿C#去创建这些文件.
于是一搜索,首先来到了这个链接:C# Excel Tutorial
里面包含了下面这些主题的代码示例, 示例很详细, 编译可直接运行.
为了理解上面这些代码需要理解一下Excel的对象模型, 可以参考msdn的下面这个链接
Excel Object Model Overview
里面介绍了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# excel API,它可以使开发人员编辑、复制、创建、打印和转换由 ClosedXML 生成的 Excel 文件。 您可以免费创建大量应用程序。 它支持旧的 Excel 97-2003 格式 (.xls) 和新的 Excel 2007 和 Excel ...
Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;&Cache;缓存帮助类 CacheHelper C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以...
如何用C#在Excel中生成图表?.txt 如何用程序实现键盘和鼠标的模拟?.txt 如何与资源管理器互动剪切、拷贝、粘贴文件.txt 深入理解C#编程中的组件-事件-委托.txt 生成透明的GIF图片 .txt 生成压缩图片时的2种...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 C#源代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 C#源代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session;&Cache;缓存帮助类 CacheHelper C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以...
Assistant创建显示图像的标签和文件 OWCChart统计图的封装类 2.Cookie&Session&Cache缓存帮助类 CacheHelper C#操作缓存的帮助类,实现了怎么设置缓存,怎么取缓存,怎么清理缓存等方法,只需要调用方法就可以...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 注:一共五部分,请全部下载完成后,放同一目录下解决即可。 目录: 第1章 窗体及菜单设计 实例001 自定义最大化、最小化和关闭按钮 2 实例002 磁性窗体的...
案例7 动态读取XMI文件 本章小结 第11章 VisualC#2008与Web应用程序 案例1 利用AdRotator控件随机显示广告图像 案例2 利用Calendar控件动态查询系统日期 案例3 会员登录系统 案例4 利用Application对象实现网站...
案例11 动态查看和修改文件属性 案例12 动态比较文件 本章小结 第9章 Visual C#2008算法及控件的应用 案例1 利用冒泡算法实现从小到大排序 案例2 利用希尔算法实现从大到小排序 案例3 判断主机Ⅳ合法性算法 ...
案例7 动态读取XMI文件 本章小结 第11章 VisualC#2008与Web应用程序 案例1 利用AdRotator控件随机显示广告图像 案例2 利用Calendar控件动态查询系统日期 案例3 会员登录系统 案例4 利用Application对象实现网站...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 注:一共五部分,请全部下载完成后,放同一目录下解决即可。 目录: 第1章 窗体及菜单设计 实例001 自定义最大化、最小化和关闭按钮 2 实例002 磁性窗体的...
案例7 动态读取XMI文件 本章小结 第11章 VisualC#2008与Web应用程序 案例1 利用AdRotator控件随机显示广告图像 案例2 利用Calendar控件动态查询系统日期 案例3 会员登录系统 案例4 利用Application对象实现网站...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 注:一共五部分,请全部下载完成后,放同一目录下解决即可。 目录: 第1章 窗体及菜单设计 实例001 自定义最大化、最小化和关闭按钮 2 实例002 磁性窗体的...
实例074 使用C#操作XML文件 257 实例075 创建PDF文档 261 实例076 批量将Word文档转换为HTML网页 263 实例077 Word目录提取工具 265 实例078 文件批量解压缩 269 第8章 网络开发应用 实例079...
如何用C#在Excel中生成图表?.txt 如何用程序实现键盘和鼠标的模拟?.txt 如何与资源管理器互动剪切、拷贝、粘贴文件.txt 深入理解C#编程中的组件-事件-委托.txt 生成透明的GIF图片 .txt 生成压缩图片时的2种...
实例074 使用C#操作XML文件 257 实例075 创建PDF文档 261 实例076 批量将Word文档转换为HTML网页 263 实例077 Word目录提取工具 265 实例078 文件批量解压缩 269 第8章 网络开发应用 实例079 局域网...
实例074 使用C#操作XML文件 257 实例075 创建PDF文档 261 实例076 批量将Word文档转换为HTML网页 263 实例077 Word目录提取工具 265 实例078 文件批量解压缩 269 第8章 网络开发应用 实例079 局域网...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 C#源代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...
C#示例源码 C#示例 C#源码 C#示例源代码 C#源代码 C#源代码例子 C#例子 注意:本源代码共有20章节,分五部分上传,名称分别为:明日科技《C#示例源代码》(1-4)、明日科技《C#示例源代码》(1-4)、明日科技《C#...