我们想为用户提供一些数据,考虑再三, 大家认为对于用户(人,而非机器)的可读性, 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

  1. using System;
  2. using System.Windows.Forms;
  3. using Excel = Microsoft.Office.Interop.Excel;
  4. namespace WindowsApplication1
  5. {
  6. public partial class Form1 : Form
  7. {
  8. public Form1()
  9. {
  10. InitializeComponent();
  11. }
  12. private void button1_Click(object sender, EventArgs e)
  13. {
  14. Excel.Application xlApp ;
  15. Excel.Workbook xlWorkBook ;
  16. Excel.Worksheet xlWorkSheet ;
  17. object misValue = System.Reflection.Missing.Value;
  18. xlApp = new Excel.ApplicationClass();
  19. xlWorkBook = xlApp.Workbooks.Add(misValue);
  20. xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
  21. xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
  22. xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
  23. xlWorkBook.Close(true, misValue, misValue);
  24. xlApp.Quit();
  25. releaseObject(xlWorkSheet);
  26. releaseObject(xlWorkBook);
  27. releaseObject(xlApp);
  28. MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");
  29. }
  30. private void releaseObject(object obj)
  31. {
  32. try
  33. {
  34. System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
  35. obj = null;
  36. }
  37. catch (Exception ex)
  38. {
  39. obj = null;
  40. MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
  41. }
  42. finally
  43. {
  44. GC.Collect();
  45. }
  46. }
  47. }
  48. }

最后想写一下关于如何设置字体的颜色, 以及单元格的背景颜色的事儿.

以背景色设置为红色为例, 首先我们可以写出形如下面这样的代码:

  1. Excel.Range chartRange;
  2. chartRange = xlWorkSheet.get_Range("a1", "e4");
  3. chartRange.Interior.Color = 255;

但是这个255很不好记, 比如青色对应的数字是16777164, 这个就更加不好理解.

所以我们可以改为这样设置颜色, 使用ColorTranslator转换一下:

  1. chartRange.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

最后还有一种设置方法是不对Color进行设置, 而是设置相应的ColorIndex, 形如下面这样:

  1. 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文件的更多相关文章

  1. PHPExcel生成或读取excel文件

    以下是详细代码示例: <?php /** * 以下是使用示例,对于以 //// 开头的行是不同的可选方式,请根据实际需要 * 打开对应行的注释. * 如果使用 Excel5 ,输出的内容应该是G ...

  2. C#读取excel文件,并生成json

    这次介绍两种方法,第一种是安装AccessDatabaseEngine,第二种是利用Npoi读取excel 一.第一种利用AccessDatabaseEngine进行读取excel文件 1.安装Acc ...

  3. Java生成和操作Excel文件(转载)

    Java生成和操作Excel文件   JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该A ...

  4. Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  5. 转帖 Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  6. (转载)Java生成和操作Excel文件

    JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过 ...

  7. C# 读取EXCEL文件的三种经典方法

    1.方法一:采用OleDB读取EXCEL文件: 把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下: public DataSet ExcelToDS(string Path) { stri ...

  8. PHPExcel读取excel文件示例

    PHPExcel读取excel文件示例PHPExcel最新版官方下载网址:http://phpexcel.codeplex.com/PHPExcel是一个非常方便生成Excel格式文件的类,官方下载包 ...

  9. ASP.NET读取EXCEL文件的三种经典方法(转)

    1.方法一:采用OleDB读取EXCEL文件:  把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:public DataSet ExcelToDS(string Path) {  str ...

随机推荐

  1. C#读写文件总结

    1.使用FileStream读写文件   文件头:   using System; using System.Collections.Generic; using System.Text; using ...

  2. AFNetWorking 使用记录

    1.从一个URL  GET数据 方法1: NSURL * url = [NSURL URLWithString:@"http://www.weather.com.cn/data/sk/101 ...

  3. N的互质数----欧拉函数

    Description 新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都 ...

  4. 【Unity入门】编辑器常用视图介绍

    版权声明:本文为博主原创文章,转载请注明出处. 打开Unity编辑器的主窗口,在窗口的右上角可以看到有个“Layout”按钮.这是用来对Unity编辑器主窗口上面的各个窗口面板进行布局的.通常情况下我 ...

  5. Spring Boot 学习笔记 - 认识Spring Boot框架

    因各种原因,.NET前端工程师重新接触JAVA,真是向全栈的路上又迈出了无奈的一步. 下面正文: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初 ...

  6. Python filter()删除1-100内素数

    用filter()删除1-100内的素数: #!/usr/bin/env python #coding:utf-8 import math def fil(n): #定义fil函数 flag = 0 ...

  7. 记录一下ORACLE 10gR2的软件下载地址,备用。

    转载自:http://www.eygle.com/archives/2008/06/10gr2_download_link.html 记录一下ORACLE 10gR2的软件下载地址,备用. 下载OTN ...

  8. 高效使用STL

    高效使用STL  参考:http://blog.jobbole.com/99115/ 仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍:熟悉以下条款,高效的使用STL: 当对象很大时,建立指针 ...

  9. Python 最佳实践

    前言 对我来说,以前每次面试是我审视自己,检验自己的一种方式.每次准备面试,以及被面试官问住的时候才会发现,其实我python我学的还不够好.工作中也是,可以从其他的同事那里获得成长.但是我今天说的是 ...

  10. (转)oracle字符集与汉字

    Oracle与汉字问题与字符集 分类: oracle 2012-10-29 17:31 425人阅读 评论(0) 收藏 举报 Oracle字符集引起的几个问题,常见的就是汉字占多少个字节,其次就是字符 ...