using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
using ExcelApplication = Microsoft.Office.Interop.Excel.ApplicationClass;

namespace ExcalDemo
{
public class ExcelFiles
    {
   public void CreateExcelFiles()
        {
            //创建一个 Excel 实例
             ExcelApplication excel = new ExcelApplication();
            try
            {
                // 注释掉的语句是:从磁盘指定位置打开一个 Excel 文件
                //excel.Workbooks.Open("demo.xls", Missing.Value, Missing.Value, 
        //Missing.Value,Missing.Value, Missing.Value, Missing.Value, 
        //Missing.Value, Missing.Value, Missing.Value, Missing.Value, 
        //Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                
                 excel.Visible = false;// 不显示 Excel 文件,如果为 true 则显示 Excel 文件
                 excel.Workbooks.Add(Missing.Value);// 添加工作簿
                 Worksheet sheet = (Worksheet)excel.ActiveSheet;// 获取当前工作表

Range range = null;// 创建一个空的单元格对象
                 sheet.get_Range(sheet.Cells[29,2],sheet.Cells[29,2]).Orientation=Excel.XlOrientation.xlVertical;//字体竖直居中在单元格内

range = sheet.get_Range("A1", Missing.Value);// 获取单个单元格
                 range.RowHeight = 20;           // 设置行高
                 range.ColumnWidth = 20;         // 设置列宽
                 range.Borders.LineStyle = 1;    // 设置单元格边框
                 range.Font.Bold = true;         // 加粗字体
                 range.Font.Size = 20;           // 设置字体大小
                 range.Font.ColorIndex = 5;      // 设置字体颜色
                 range.Interior.ColorIndex = 6;  // 设置单元格背景色
                 range.HorizontalAlignment = XlHAlign.xlHAlignCenter;// 设置单元格水平居中
                 range.VerticalAlignment = XlVAlign.xlVAlignCenter;// 设置单元格垂直居中
                 range.Value2 = "设置行高和列宽";// 设置单元格的值

range = sheet.get_Range("B2", "D4");// 获取多个单元格
                 range.Merge(Missing.Value);         // 合并单元格
                 range.Columns.AutoFit();            // 设置列宽为自动适应
                 range.NumberFormatLocal = "#,##0.00";// 设置单元格格式为货币格式
        // 设置单元格左边框加粗
                 range.Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;
        // 设置单元格右边框加粗
                 range.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;
                 range.Value2 = "合并单元格";

// 页面设置
                 sheet.PageSetup.PaperSize = XlPaperSize.xlPaperA4;          // 设置页面大小为A4
                 sheet.PageSetup.Orientation = XlPageOrientation.xlPortrait; // 设置垂直版面
                 sheet.PageSetup.HeaderMargin = 0.0;                         // 设置页眉边距
                 sheet.PageSetup.FooterMargin = 0.0;                         // 设置页脚边距
                 sheet.PageSetup.LeftMargin = excel.InchesToPoints(0.354330708661417); // 设置左边距
                 sheet.PageSetup.RightMargin = excel.InchesToPoints(0.354330708661417);// 设置右边距
                 sheet.PageSetup.TopMargin = excel.InchesToPoints(0.393700787401575);  // 设置上边距
                 sheet.PageSetup.BottomMargin = excel.InchesToPoints(0.393700787401575);// 设置下边距
                 sheet.PageSetup.CenterHorizontally = true;                  // 设置水平居中

// 打印文件
                 sheet.PrintOut(Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                
                // 保存文件到程序运行目录下
                 sheet.SaveAs(System.Windows.Forms.Application.StartupPath + "\demo.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

excel.ActiveWorkbook.Close(false, null, null); // 关闭 Excel 文件且不保存
             }
            catch (Exception ex)
            {
                 MessageBox.Show(ex.Message);
             }
            finally
            {
                 excel.Quit(); // 退出 Excel
                 excel = null; // 将 Excel 实例设置为空
                // 即便是这样, 有时在系统任务管理器中仍能看到一个 Excel 进程, 但有时也看不到
                // 据非权威人事说,这是 Office 2003 的 Bug. 这个问题有待与考证.
             }
         }
     }
}
            catch (Exception ex)
            {
                 MessageBox.Show(ex.Message);
             }
            finally
            {
                 excel.Quit(); // 退出 Excel
                 excel = null; // 将 Excel 实例设置为空
                // 即便是这样, 有时在系统任务管理器中仍能看到一个 Excel 进程, 但有时也看不到
                // 据非权威人事说,这是 Office 2003 的 Bug. 这个问题有待与考证.
             }
         }
     }
}

range = sheet.get_Range("B2", "D4");// 获取多个单元格
                 range.Merge(Missing.Value);         // 合并单元格
                 range.Columns.AutoFit();            // 设置列宽为自动适应
                 range.NumberFormatLocal = "#,##0.00";// 设置单元格格式为货币格式
        // 设置单元格左边框加粗
                 range.Borders[XlBordersIndex.xlEdgeLeft].Weight = XlBorderWeight.xlThick;
        // 设置单元格右边框加粗
                 range.Borders[XlBordersIndex.xlEdgeRight].Weight = XlBorderWeight.xlThick;
                 range.Value2 = "合并单元格";

// 页面设置
                 sheet.PageSetup.PaperSize = XlPaperSize.xlPaperA4;          // 设置页面大小为A4
                 sheet.PageSetup.Orientation = XlPageOrientation.xlPortrait; // 设置垂直版面
                 sheet.PageSetup.HeaderMargin = 0.0;                         // 设置页眉边距
                 sheet.PageSetup.FooterMargin = 0.0;                         // 设置页脚边距
                 sheet.PageSetup.LeftMargin = excel.InchesToPoints(0.354330708661417); // 设置左边距
                 sheet.PageSetup.RightMargin = excel.InchesToPoints(0.354330708661417);// 设置右边距
                 sheet.PageSetup.TopMargin = excel.InchesToPoints(0.393700787401575);  // 设置上边距
                 sheet.PageSetup.BottomMargin = excel.InchesToPoints(0.393700787401575);// 设置下边距
                 sheet.PageSetup.CenterHorizontally = true;                  // 设置水平居中

// 打印文件
                 sheet.PrintOut(Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                
                // 保存文件到程序运行目录下
                 sheet.SaveAs(System.Windows.Forms.Application.StartupPath + "\demo.xls", Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

excel.ActiveWorkbook.Close(false, null, null); // 关闭 Excel 文件且不保存
             }

运行环境: Microsoft Office Excel 2003 + Microsoft Visual Studio 2005

1. 为项目添加 COM 组件的引用
方法如下:
项目 -> 添加引用 -> com -> Microsoft Excel Object 11.0 Object Library -> 确定
此时项目里会增加 3 个引用, 分别是: Excel、Microsoft.Office.Core、VBIDE

2. 在类文件里添加如下命名空间的引用
using System.Reflection;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;

using ExcelApplication = Microsoft.Office.Interop.Excel.ApplicationClass; //为了与 System.Windows.Forms 命名空间下的 Application 类有所区分, 纯属方便代码的编写.

注: 最好不要用在窗体类中使用. 因为,当引入 Microsoft.Office.Interop.Excel 命名空间后, Microsoft.Office.Interop.Excel 命名空间下的 Application 接口会同 System.Windows.Forms 命名空间下的 Application 类产生二义性冲突. 要使用 Application 类, 就必须在 Application 前面添加完整的命名空间名.

经过以上 2 步的操作就可以使用 Excel 了. 但是, 关于 Excel 的 MSDN 很少, 多数都是 English 的. 这样对使用 Excel 带来了不便. 想调整单元格的大小都十分困难. 这里我告诉大家一个简单实用的笨方法. 那就是: 打开你的 Excel, 录制宏. 然后根据生成的 VB 代码, 去到 MSDN 里查相关 C# 的帮助.

C# 中使用 Excel的更多相关文章

  1. 【转】js 中导出excel 较长数字串会变为科学计数法

    [转]js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串 ...

  2. 在VBA中调用excel函数

    以前不太会用VBA时,都是在excel中使用函数来计算一些数据.毕竟函数不如代码,效率比较低.所以,就学着怎么在VBA中引用Excel函数.平时我用得比较多的函数就是countif和sumif函数.1 ...

  3. UpdatePanel 中 导出Excel按钮

    UpdatePanel 中 导出Excel按钮 要加 Triggers </ContentTemplate> <Triggers> <asp:PostBackTrigge ...

  4. asp.net中导出Excel的方法

    一.asp.net中导出Excel的方法: 本文转载 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出 ...

  5. ASP.net中导出Excel的简单方法介绍

    下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...

  6. 报表中的Excel操作之Aspose.Cells(Excel模板)

    原文:报表中的Excel操作之Aspose.Cells(Excel模板) 本篇中将简单记录下Aspose.Cells这个强大的Excel操作组件.这个组件的强大之处,就不多说,对于我们的报表总是会有导 ...

  7. C#中对Excel进行操作

    工作中要处理一批数据,主要是处理从别处导出来的Excel表格(大概有一千多行,三十多列),拿到表格对Excel表格进行分析,按照一定的规则进行拆分成为一万多行的数据:首先这个需求要用程序进行处理的背景 ...

  8. j2e中操作EXCEL

    在j2e中操作excel,无非2种情况,在这里我贴部分代码做个例子就OK,不管是导入和导出都是操作的都是流 1,导入,浏览器输入EXCEL到java后台解析 package action; impor ...

  9. 【NPOI】通过NPOI从内存流中创建EXCEL

    一言不合就开始帖代码 XSSFWorkbook workbook = new XSSFWorkbook(); //创建工作簿 XSSFSheet sheet = (XSSFSheet)workbook ...

  10. [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...

随机推荐

  1. bzoj 3916 暴力哈希

    暴力的哈希,注意: 将一个串当作另一个串的前缀,需要乘上p[len],len=后面串的长度 这是自己的代码,拿数据在本地测A掉了,但是bz上wa了??bz换数据了难道?? #include<cs ...

  2. Filter 快速开始 异步Servlet 异步请求 AsyncContext 异步线程 异步派发 过滤器拦截

    [web.xml] <filter> <filter-name>normalFilter</filter-name> <filter-class>net ...

  3. 【游记】THUWC2018踹线记

    Day1. 早上九点多报道,然后就是试机.一开始有一些懵,没看清门外的通知,操作起来各种懵逼.不过提前适应过了在Linux下面编程,所以问题不大.调了gedit的界面,试了一下对拍,敲了一道试机题,然 ...

  4. 20155324王鸣宇安装虚拟机+初次学习Linux的感想20155324

    安装Linux系统 这是最后一次预备作业,但不是最后一次作业.当然要认真对待,在这个除旧迎新的日子里.认真的花了一个下午的时间专研学习了如何安装Linux系统.通过学习了基于VirtualBox虚拟机 ...

  5. 隐马尔可夫模型HMM(二)概率计算问题

    摘自 1.李航的<统计学习方法> 2.http://www.cnblogs.com/pinard/p/6955871.html 一.概率计算问题 上一篇介绍了概率计算问题是给定了λ(A,B ...

  6. C++ 变量的引用 &

    创建变量的引用:int &a = b; 引用变量a是变量b的别名:是传址操作,把变量b的数据地址赋值给变量a,a和b指向同一个数据 主要用途:用作函数的形参,通过将引用变量用作参数,函数将使用 ...

  7. Java SE之正则表达式五:切割

    /** * * @author Zen Johnny * @date 2018年4月29日 下午3:53:55 * */ package demo.regex; /* 正则表达式:切割 */ publ ...

  8. 堆(heap)与栈(stack)

    编程语言书籍中经常解释: 值类型被创建在栈上,引用类型被创建在堆上.   构造函数,原型之类的算是引用类型吗? 5种基本数据类型有Undefined.Null.Boolean.Number 和 Str ...

  9. 电路板上的元件R,T,D,C,U

    参考链接: https://zhidao.baidu.com/question/194132005.html

  10. 【mmall】IDEA中Service层无法识别Mapper,但是代码通过问题

    解决方案