C#模板打印excel

using Microsoft.Office.Interop.Excel; //引用

public void PrintPriviewExcelFile(string filePath)

{

            Microsoft.Office.Interop.Excel.ApplicationClass xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();

            xlApp.Visible = true;

            object oMissing = System.Reflection.Missing.Value;

            Microsoft.Office.Interop.Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(filePath, 0, true, 5, oMissing, oMissing, true, 1, oMissing, false, false, oMissing, false, oMissing, oMissing);

            Microsoft.Office.Interop.Excel.Worksheet xlWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkbook.Worksheets[1];

            xlWorksheet.PrintPreview(null);

            xlApp.Visible = false;

            xlWorksheet = null;

        }

private _Workbook _workBook = null;

private Worksheet _workSheet = null;

private Excel.Application _excelApplicatin = null;

_excelApplicatin = new Excel.Application();

_excelApplicatin.Visible = true;

_excelApplicatin.DisplayAlerts = true;

_workBook = _excelApplicatin.Workbooks.Add(XlSheetType.xlWorksheet);

_workSheet = (Worksheet)_workBook.ActiveSheet;

_workSheet.Name = "workSheetName";

//打开已存在的Excel

            string strExcelPathName = AppDomain.CurrentDomain.BaseDirectory + "excelSheetName.xls";

            Excel.Workbook workBook = application.Workbooks.Open(strExcelPathName, Type.Missing, Type.Missing,

              Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,

              Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

           //读取已打开的Excel

            Excel.Worksheet workSheet1 = (Excel.Worksheet)workBook.Sheets["SheetName1"];

            Excel.Worksheet workSheet2 = (Excel.Worksheet)workBook.Sheets["SheetName2"];       

            //添加一个workSheet

            Worksheet workSheet = (Worksheet)workBook.Worksheets.Add(System.Type.Missing, System.Type.Missing, System.Type.Missing, System.Type.Missing);

//RowHeight   "1:1"表示第一行, "1:2"表示,第一行和第二行

((Excel.Range)_workSheet.Rows["1:1", System.Type.Missing]).RowHeight = 100;

//ColumnWidth "A:B"表示第一列和第二列, "A:A"表示第一列

((Excel.Range)_workSheet.Columns["A:B", System.Type.Missing]).ColumnWidth = 10;

// EXCEL操作(需要冻结的字段 按住ALT+W 再按F)

            Excel.Range excelRange = _workSheet .get_Range(_workSheet .Cells[10, 5], _workSheet .Cells[10, 5]);

            excelRange.Select();

            excelApplication.ActiveWindow.FreezePanes = true;

//Borders.LineStyle 单元格边框线

Excel.Range excelRange = _workSheet.get_Range(_workSheet.Cells[2, 2], _workSheet.Cells[4, 6]);

//单元格边框线类型(线型,虚线型)

excelRange.Borders.LineStyle = 1;

excelRange.Borders.get_Item(XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous;

//指定单元格下边框线粗细,和色彩

excelRange.Borders.get_Item(XlBordersIndex.xlEdgeBottom).Weight = Excel.XlBorderWeight.xlMedium;

excelRange.Borders.get_Item(XlBordersIndex.xlEdgeBottom).ColorIndex =3;

//设置字体大小

excelRange.Font.Size = 15;

//设置字体是否有下划线

excelRange.Font.Underline = true

//设置字体在单元格内的对其方式

excelRange.HorizontalAlignment = XlHAlign.xlHAlignCenter;

//设置单元格的宽度

excelRange.ColumnWidth = 15;

//设置单元格的背景色

excelRange.Cells.Interior.Color = System.Drawing.Color.FromArgb(255, 204, 153).ToArgb();

// 给单元格加边框

excelRange.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThick,

                                          XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());

//自动调整列宽

excelRange.EntireColumn.AutoFit();

// 文本水平居中方式

excelRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;           

//文本自动换行

excelRange.WrapText = true;

//填充颜色为淡紫色

excelRange.Interior.ColorIndex = 39;

//合并单元格

excelRange.Merge(excelRange.MergeCells);

_workSheet.get_Range("A15", "B15").Merge(_workSheet.get_Range("A15", "B15").MergeCells);

/// <summary>

/// 常用颜色定义,对就Excel中颜色名

/// </summary>

public enum ColorIndex

{

   无色 = -4142,   自动 = -4105,   黑色 = 1,   褐色 = 53,   橄榄 = 52,   深绿 = 51,   深青 = 49,

   深蓝 = 11,   靛蓝 = 55,   灰色80 = 56,   深红 = 9,   橙色 = 46,   深黄 = 12,   绿色 = 10,

   青色 = 14,   蓝色 = 5,   蓝灰 = 47,   灰色50 = 16,   红色 = 3,   浅橙色 = 45,   酸橙色 = 43,

   海绿 = 50,   水绿色 = 42,   浅蓝 = 41,       紫罗兰 = 13,   灰色40 = 48,   粉红 = 7,

   金色 = 44,   黄色 = 6,   鲜绿 = 4,   青绿 = 8,   天蓝 = 33,   梅红 = 54,   灰色25 = 15,

   玫瑰红 = 38,   茶色 = 40,   浅黄 = 36,   浅绿 = 35,   浅青绿 = 34,   淡蓝 = 37,   淡紫 = 39,

   白色 = 2

}

    range.NumberFormatLocal = "@";     //设置单元格格式为文本

    range = (Range)worksheet.get_Range("A1", "E1");     //获取Excel多个单元格区域:本例做为Excel表头

    range.Merge(0);     //单元格合并动作

    worksheet.Cells[1, 1] = "Excel单元格赋值";     //Excel单元格赋值

    range.Font.Size = 15;     //设置字体大小

    range.Font.Underline=true;     //设置字体是否有下划线

    range.Font.Name="黑体";       设置字体的种类  

    range.HorizontalAlignment=XlHAlign.xlHAlignCenter;     //设置字体在单元格内的对其方式

    range.ColumnWidth=15;     //设置单元格的宽度

    range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb();     //设置单元格的背景色

    range.Borders.LineStyle=1;     //设置单元格边框的粗细

    range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb());     //给单元格加边框

    range.Borders.get_Item(Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop).LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlLineStyleNone; //设置单元格上边框为无边框

        range.EntireColumn.AutoFit();     //自动调整列宽

    Range.HorizontalAlignment= xlCenter;     // 文本水平居中方式

    Range.VerticalAlignment= xlCenter     //文本垂直居中方式

    Range.WrapText=true;     //文本自动换行

    Range.Interior.ColorIndex=39;     //填充颜色为淡紫色

    Range.Font.Color=clBlue;     //字体颜色

    xlsApp.DisplayAlerts=false;     //保存Excel的时候,不弹出是否保存的窗口直接进行保存

Excel对象

微软的Excel对象模型包括了128个不同的对象,从矩形,文本框等简单的对象到透视表,图表等复杂的对象.下面我们简单介绍一下其中最重要,也是用得最多的四个对象。

(1) Application对象。Application对象处于Excel对象层次结构的顶层,表示Excel自身的运行环境。

(2) Workbook对象。Workbook对象直接地处于Application对象的下层,表示一个Excel工作薄文件。

(3) Worksheet对象。Worksheet对象包含于Workbook对象,表示一个Excel工作表。

(4) Range对象。Range对象包含于Worksheet对象,表示Excel工作表中的一个或多个单元格

在.NET公用语言框架内运行的程序为受管代码。受管代码在程序中所有类型都受到严格检查,没有指针,对内存的管理完全由运行系统控制。受控状态下,编写程序更为容易,且更少出错,我们可以花更多的时间在解决实际问题上而不是在计算机语言问题上。相对而言,那些在.NET框架外运行的程序为非受管代码。比如:COM组件、ActiveX组件、Win32

API函数、指针运算等。C#编程中在某些特定情况下,需要运用非受管代码,例如,要利用一个成熟的COM组件,或者调用一个API函数,或者用指针去编写实时/高效程序等。

Visual C#中调用Excel的COM组件

一个.NET组件事实上是一个.NET下的DLL,它包含的不仅是运行程序本身,更重要的是包含这个DLL的描述信息(Meta
Data,即元数据),而一个COM组件是用其类库(TLB)储存其描述信息。这些COM组件都是非受管代码,要在Visual
C#中使用这些非受管代码的COM组件,就必须把他们转换成受管代码的.NET组件。所以在用Visual
C#调用Excel表格之前,必须完成从COM组件的非受管代码到受管代码的类库的转换。

1、将Excel的COM组件转换为.NET组件

在项目中打开Add Reference对话框,选择COM栏,之后在COM列表中找到"Microsoft Excel 9.0 Object
Library"(Office 2000),然后将其加入到项目的References中即可。Visual
C#.NET会自动产生相应的.NET组件文件,以后即可正常使用。

这个转换形成.NET组件不能单独使用,它不过是以前的COM组件的一个外层包装,在.NET中可以通过这个外层包装去发现原来的COM组件并调用其相应的界面函数。所以它必须与原来的COM组件一起起作用。

2、Visual C#打开Excel表格

事实上,在C#中使用一个经转换的COM组件和使用任何一个其它.NET组件完全一样。可以用new关键字创建一个经转换的COM组件,然后再像使用任何一个其它C#对象一样使用这个组件对象。

在转换后的.NET组件中定义了一个命名空间Excel,在此命名空间中封装了一个类Application,这个类和启动Excel表格有非常重要的关系,在Visual C#中,只需要下列三行代码就可以完成打开Excel表格的工作,具体如下:

Excel.Application excel = new Excel.Application ();//引用Excel对象

excel.Application.Workbooks.Add ( true );//引用Excel工作簿

excel.Visible = true ;//使Excel可视

但此时的Excel表格是一个空的表格,没有任何内容,下面就来介绍如何往Excel表格中输入数据。

3、往Excel表格中输入数据

在命名空间"Excel"中,还定义了一个类"Cell",这个类所代表的就是Excel表格中的一个单元格。通过给"Cell"赋值,从而实现往Excel表格中输入相应的数据,下列代码功能是打开Excel表格,并且往表格输入一些数据。

Excel.Application excel = new Excel.Application () ;

excel.Application.Workbooks.Add ( true ) ;

excel.Cells[ 1 , 1 ] = "First Row First Column" ;

excel.Cells[ 1 , 2 ] = "First Row Second Column" ;

excel.Cells[ 2 , 1 ] = "Second Row First Column" ;

excel.Cells[ 2 , 2 ] = "Second Row Second Column" ;

excel.Visible = true ;

一、调用Excel的方法:一般情况下有两种方法调用Excel:

1、直接使用Delphi自带的组件:在Form中分别放入ExcelApplication, ExcelWorkbook和ExcelWorksheet。

2、动态创建Excel文件:首先创建 Excel 对象,使用ComObj,Excel2000:

var ExcelApp: Variant;

ExcelApp := CreateOleObject( ‘Excel.Application‘ );

二、导入数据:在程序中,我们可以将查询到的数据(SQL、Access、)导入到Excel中。例如:用Adoquery查询Access中的数据:

1、先查到所需的数据;

2、导入:i:=1;

Adoquery.First;

while not Adoquery.Eof do

Begin

ExcelApp.WorkSheets[1].Cells[i,1].Value := i;//添加序号的值

ExcelApp.WorkSheets[1].Cells[i,2].Value := Adoquery.FieldByName(‘cp_name‘).AsString;

……

Inc(i);

Adoquery.Next;

End;

当然也可以把Adotable、Adoquery、Table、Query等组件的数据导入到Excel中。

三、Excel的处理:如果在你已知Excel格式的情况下,可以控制Excel,如下:

1、 显示当前窗口:ExcelApp.Visible := True;

2、 更改 Excel 标题栏:ExcelApp.Caption := ‘标题内容‘;

3、 添加新工作簿:ExcelApp.WorkBooks.Add;

4、 设置第2个工作表为活动工作表:ExcelApp.WorkSheets[2].Activate;

5、 给单元格赋值:ExcelApp.Cells[1,1].Value := ‘第一行第一列‘;

6、 设置指定列的宽度(单位:字符个数),以第一列为例:

ExcelApp.ActiveSheet.Columns[1].ColumnsWidth := 5;

7、 设置指定行的高度(单位:磅)(1磅=0.035厘米),以第二行为例:

ExcelApp.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米

8、文字水平居中:Excelid.worksheets[1].Rows[1].HorizontalAlignment := $FFFFEFF4;

文字垂直居中:Excelid.worksheets[1].Rows[1].VerticalAlignment := $FFFFEFF4;

9、 插入一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Insert;

b. ExcelApp.ActiveSheet.Columns[1].Insert;

10、 删除一行或一列:a. ExcelApp.ActiveSheet.Rows[2].Delete;

b. ExcelApp.ActiveSheet.Columns[1].Delete;

11、合并单元格:ExcelApp.worksheets[1].range[A1:F8‘].Merge(abc);注:要声明变量abc: Variant;

12、竖行显示文字:ExcelApp.worksheets[1].Cells.Item[1,1].Orientation:= xlVertical;

13、单元格加边线:ExcelApp.worksheets[1].Range[A1:F8].Borders.LineStyle := 1;

14、在第8行之前插入分页符:ExcelApp.WorkSheets[1].Rows[8].PageBreak := 1;

15、在第4列之前删除分页符:ExcelApp.ActiveSheet.Columns[4].PageBreak := 0;

16、指定边框线宽度:ExcelApp.ActiveSheet.Range[ ‘B34‘ ].Borders[2].Weight := 3;

1-左    2-右   3-顶    4-底   5-斜( \ )     6-斜( / )

17、拷贝操作:a.拷贝整个工作表:ExcelApplication1.ActiveSheet.Used.Range.Copy;

b.拷贝指定区域:ExcelApplication1.ActiveSheet.Range[ ‘A1:E2‘ ].Copy;

c.从A1位置开始粘贴:ExcelApplication1.ActiveSheet.Range.[ ‘A1‘ ].PasteSpecial;

d.从文件尾部开始粘贴:ExcelApplication1.ActiveSheet.Range.PasteSpecial;

18、清除第一行第四列单元格公式:ExcelApp.ActiveSheet.Cells[1,4].ClearContents;

19、工作表保存:if not ExcelApp.ActiveWorkBook.Saved then

ExcelApp.ActiveSheet.PrintPreview;

20、工作表另存为:ExcelApp.SaveAs( ‘C:\Excel\Demo1.xls‘ );

21、放弃存盘:ExcelApp.ActiveWorkBook.Saved := True;

22、关闭工作簿:ExcelApp.WorkBooks.Close;

23、退出 Excel:ExcelApp.Quit;

下面是有关打印页面控制的语句:

24、设置第一行字体属性:ExcelApp.ActiveSheet.Rows[1].Font.Name := ‘隶书‘;

ExcelApp.ActiveSheet.Rows[1].Font.Color := clBlue;

ExcelApp.ActiveSheet.Rows[1].Font.Bold := True;

ExcelApp.ActiveSheet.Rows[1].Font.UnderLine := True;

ExcelApp.ActiveSheet.Rows[1].Font.size:=10;

25、进行页面设置:a.页眉:ExcelApp.ActiveSheet.PageSetup.CenterHeader := ‘报表演示‘;

b.页脚:ExcelApp.ActiveSheet.PageSetup.CenterFooter := ‘共&N页 第&页‘;

c.页眉到顶端边距2cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 2/0.035;

d.页脚到底端边距3cm:ExcelApp.ActiveSheet.PageSetup.HeaderMargin := 3/0.035;

e.顶边距2cm:ExcelApp.ActiveSheet.PageSetup.TopMargin := 2/0.035;

f.底边距2cm:ExcelApp.ActiveSheet.PageSetup.BottomMargin := 2/0.035;

g.左边距2cm:ExcelApp.ActiveSheet.PageSetup.LeftMargin := 2/0.035;

h.右边距2cm:ExcelApp.ActiveSheet.PageSetup.RightMargin := 2/0.035;

i.页面水平居中:ExcelApp.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035;

j.页面垂直居中:ExcelApp.ActiveSheet.PageSetup.CenterVertically := 2/0.035;

k.打印单元格网线:ExcelApp.ActiveSheet.PageSetup.PrintGridLines := True;

26、打印预览工作表:ExcelApp.ActiveSheet.PrintPreview;

27、打印输出工作表:ExcelApp.ActiveSheet.PrintOut;

对Excel的其他控制:

28、excel的多单元格合计功能:ExcelApp..Cells[ARow, ACol].Formula

:= ‘= SUM($+IntToStr(BeginRow) + + IntToStr(EndRow) +‘);

注:声明变量ARow, ACol: Integer;

29、打开已经存在的Excel文件: ExcelApplication1.Workbooks.Open (c:\a.xls

EmptyParam,EmptyParam,EmptyParam,EmptyParam,

EmptyParam,EmptyParam,EmptyParam,EmptyParam,

EmptyParam,EmptyParam,EmptyParam,EmptyParam,0);

时间: 2024-10-26 05:10:48

C#模板打印excel的相关文章

打印Excel文件时如何不显示页眉和页脚

我们在制作EXCEL表格时,一般都会定义标题,但是在打印时,总是会出现页眉和页脚,打印出来影响美观,怎么办? 点击打印预览后,在页面设置的页眉页脚标签,里的页眉和页脚选择无,即可,如图. 打印Excel文件时如何不显示页眉和页脚,布布扣,bubuko.com

按模板打印word防止并发操作

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

aspose.cells根据模板导出excel

又隔十多天没写博客了,最近都在忙项目的事情,公司人事变动也比较大,手头上就又多了一个项目.最近做用aspose.cells根据模板导出excel报价单的功能,顺便把相关的核心记下来,先上模板和导出的效果图吧,如下: 导出效果图(看到产品图,打不死的程(diao)序(si)员(猿)骚动吧,有没有不禁看了看自己粗大的右手): (其中红色框框起来的是动态填充的内容,工作薄名(产品信息)也是动态输出的) 模板如下: 大概流程是这样,先把需要输出到excel的内容存到一个model里面,然后把该model

OfficeOpenXml.Entends 根据模板导出Excel

OfficeOpenXml.Entends 是一个OfficeOpenXml拓展,用于根据模板输出excel,依赖于EPPlus(码农一致好评,其API操作及友好程度要高于 NPOI),可以直接在NuGet中获取 OfficeOpenXml.Entends 1.0.1.0 用法介绍,直接上代码吧 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using OfficeOpenXml; 5 usi

WORD能打印 EXCEL却 找不到打印机

问题:WORD能打印 EXCEL却 找不到打印机 解决办法:今天碰到如上问题,去网上搜了搜,大家对此问题的回答多种多样,但确都没有说到点上.在此,我就不说为什么造成此问题,不外乎系统原因.软件原因.用户配置文件原因等几方面,我个人更倾向于后种原因,解决办法很简单,将现在使用的用户初始化一下就可,如果用administraor的用户也可以换个用户使用,很简单的解决办法.

在ASP程序中打印Excel报表的新方法

目前,B/S模式(浏览器/服务器模式)成为企业网上首选的计算模式.由于B/S模式的特殊性,在C/S下相对较易实现的Excel报表打印功能在B/S下却成为一个难点.本人通过研究写了一个基于ASP程序的打印Excel报表的程序.本程序的特点是无须任何组件. Print.asp ------------------------------------------------ <html><title>打印Excel报表</title> <% '控制脚本语言 respon

POI通过模板导出EXCEL文件

一般的EXCEL导出使用POI先创建一个HSSFWorkbook,然后通过不断创建HSSFRow,HSSFCell后设置单元格内容便可以完成导出. 这次在项目中需要用到模板,导出的内容包括(1.模板中的内容.样式.2.自己需要新增的内容.样式.),还需要设置单元格的样式,在网上搜了一些blog,完成后记录一下. 分析这次需求,最关键的就是如何获取到填充了模板的新HSSFWorkbook,如果获取到它,我们可以熟练的往里面添加内容. 1 File fi = new File("F:/usr/use

apache poi根据模板导出excel

需要预先新建编辑好一个excel文件,设置好样式. 编辑好输出的数据,根据excel坐标一一对应. 支持列表数据输出,列表中列合并. 代码如下: package com.icourt.util; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.user

C#使用模板导出Excel

前言:此随笔仅供自己学习,如有不足请指出 在某些情况导出的时候,会有很复杂的表头或者样式,如果靠代码去调整的话回很麻烦,需要写很多代码,这个时候可以预先设置好表格,这样就方便灵活很多. /// <summary> /// 使用模板导出Excel /// </summary> /// <param name="listEntity">数据集</param> /// <param name="path">路径&