在C#中利用Excel做高级报表Word格式.docx

上传人:b****3 文档编号:16806552 上传时间:2022-11-26 格式:DOCX 页数:16 大小:238.03KB
下载 相关 举报
在C#中利用Excel做高级报表Word格式.docx_第1页
第1页 / 共16页
在C#中利用Excel做高级报表Word格式.docx_第2页
第2页 / 共16页
在C#中利用Excel做高级报表Word格式.docx_第3页
第3页 / 共16页
在C#中利用Excel做高级报表Word格式.docx_第4页
第4页 / 共16页
在C#中利用Excel做高级报表Word格式.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

在C#中利用Excel做高级报表Word格式.docx

《在C#中利用Excel做高级报表Word格式.docx》由会员分享,可在线阅读,更多相关《在C#中利用Excel做高级报表Word格式.docx(16页珍藏版)》请在冰豆网上搜索。

在C#中利用Excel做高级报表Word格式.docx

上普货

解放LSY9190WS

1110255971

0094327

浙KA1045

普货

解放LSY9171WCD

1110391226

0516003

浙KA1313

解放9190WCD

1110315027

0538701

浙KA1322

24323332

0538716

浙KA1575

解放LSY9181WCD

1110314149

0113018

浙KA1925

解放LSY9220WCD

1110390626

00268729

浙KA2258

解放LSY9220WSP

1110481542

00320

为了在C#中使用Excel,我们要先做一点准备工作,通过查找(前提是你安装VisualStudio.Net和Excel2000),在你的计算机中找到TlbImp和Excel9.olb,将他们复制到一个文件夹中,在DOS窗口中执行TlbImpExcel9.olb,这时会产生以下三个文件:

Excel.dll、Office.dll和VBIDE.dll。

我们来完成两项任务,一是按网上文章介绍的方法,增加将数据写入一个Excel文件,也就是做一个简单报表,二是用Excel创建一个文件,然后以此文件为模板生成高级报表。

打开VisualStudio.Net,新建一个C#的windows应用程序,取名为MyExcel。

根据个人爱好,对窗口做一些美化工作,然后放两个按钮:

btnNormal和btnAdvance,Caption分别为“普通报表”和“高级报表”。

从菜单中选择“项目”→“添加应用”,在弹出的对话框中选com页,再点浏览按钮,选择刚才生成的三个文件,如下:

点“打开”按钮,再点“确定”按钮。

切换到代码窗口中,在文件头添加下面两个引用:

usingSystem.IO;

usingSystem.Reflection;

再添加一个二维数组来表示数据表:

privatestring[,]myData=

{

{"

车牌号"

"

类型"

品牌"

型号"

颜色"

附加费证号"

车架号"

},

浙KA3676"

危险品"

货车"

铁风SZG9220YY"

白"

1110708900"

022836"

浙KA4109"

解放CA4110P1K2"

223132"

010898"

浙KA0001A"

南明LSY9190WS"

1110205458"

0474636"

浙KA0493"

上普货"

解放LSY9190WS"

1110255971"

0094327"

浙KA1045"

普货"

解放LSY9171WCD"

蓝"

1110391226"

0516003"

浙KA1313"

解放9190WCD"

1110315027"

0538701"

浙KA1322"

24323332"

0538716"

浙KA1575"

解放LSY9181WCD"

1110314149"

0113018"

浙KA1925"

解放LSY9220WCD"

1110390626"

00268729"

浙KA2258"

解放LSY9220WSP"

111048152"

00320"

}

};

切换回设计窗口,双击“普通报表”按钮,设计普通报表,代码如下:

privatevoidbtnNormal_Click(objectsender,System.EventArgse)

//创建一个Excel文件

Excel.ApplicationmyExcel=newExcel.Application();

myExcel.Application.Workbooks.Add(true);

//让Excel文件可见

myExcel.Visible=true;

//第一行为报表名称

myExcel.Cells[1,4]="

普通报表"

;

//逐行写入数据,

for(inti=0;

i<

11;

i++)

{

for(intj=0;

j<

7;

j++)

{

//以单引号开头,表示该单元格为纯文本

myExcel.Cells[2+i,1+j]="

'

"

+myData[i,j];

}

}

}

说明一下,Cells[2,1]指第2行第1个单元格,是以1为基准的,而在C#中的数组是以0为基准的,另外,我们还发现,对于编号之类的数据,实际是文本,而Excel将它认成了数字,由于太长,自动换成了科学计数,这不是我们要求的,在Excel中,如果某单元格以单引号“’”开头,表示该单元格为纯文本,因此,我们在每个单元格前面加单引号。

运行结果如下:

可以看出,该报表非常简陋,标题行没有合并局,字体大小也不合适,连表格线都没有。

当然,我们可以写代码来设置单元格字体、大小等等工作,这类技巧网上很多,但如果真要用C#来完成,是一件非常难的事情,还有个办法就是将想要的操作录制成宏,研究一下宏代码,但宏是用VBA写的,要转换成果C#可不是件容易的事情。

第一种办法不是本文的重点,就到此为止。

下面进行高级报表设计,该方法的原理为:

首先打开Excel,按照要求排好版,保存为一个文件做为模板,然后在C#中将该文件复制为一个新文件,在指定位置填入数据就可以了,为了添加表格线,我们录制了一个宏,在C#中执行该宏即可。

参考模板如下:

当然,你还可以排得更漂亮,因为是单纯的Excel操作,不需要特殊说明。

如果记录很多,往往一页无法打印完成,我们要求在每一页都显示报表标题和小标题,也就是上图中的第1、2行,这里有一个技巧:

选择Excel的菜单“文件”→“页面设置”,选择“工作表”,在“顶端标题行”后的框中输入“$1:

$2”,也就是1~2行,当然,你也点右边的红箭头,然后用鼠标选择。

当你的记录超过一页时,会自动在下一页加入标题,非常方便。

表格中目前还没有表格线,因为我们不知道到底有多少数据,因此,也无法知道为多少单元格设置边框,我们借助宏来完成。

按下面步骤录制一个宏:

1、随便选择几个单元格;

2、选择菜单“工具”→“宏”→“录制新宏”,输入宏的名称,就用默认的“宏1”吧,点确定;

3、选择菜单“格式”→“单元格”,在对话框中选择“边框”,将内边框和外边框均选中,按确定;

4、此时,刚才选择的单元格就有了边框,再点工具栏中的“停止录制宏”按钮

来结束宏录制。

刚才的操作目的是录制宏而不是加边框,因此,我们按“Ctrl+Z”来撤消刚才的操作,通过按Alt+F8来调出宏,选择“宏1”,选择编辑,看到的代码应该如下:

Sub宏1()

宏1Macro

苟安廷记录的宏2003-5-7

Selection.Borders(xlDiagonalDown).LineStyle=xlNone

Selection.Borders(xlDiagonalUp).LineStyle=xlNone

WithSelection.Borders(xlEdgeLeft)

.LineStyle=xlContinuous

.Weight=xlThin

.ColorIndex=xlAutomatic

EndWith

WithSelection.Borders(xlEdgeTop)

WithSelection.Borders(xlEdgeBottom)

WithSelection.Borders(xlEdgeRight)

WithSelection.Borders(xlInsideVertical)

WithSelection.Borders(xlInsideHorizontal)

EndSub

图中表的数据都是供排版参考用的,结束前将实际内容删除掉,即只留下排好版的格式,包括标题、列标题等,将实际内容去掉。

将文件保存到一个地方,如D:

\Normal.xls,当然,实际开发时,可以放到执行文件所在目录下,为了防止用户随便修改,可以将文件名改为normal.rpt之类。

有了上面的准备,我们就可以在C#中使用了,添加“高级报表”按钮的响应代码。

下面是全部代码清单。

usingSystem;

usingSystem.Drawing;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Windows.Forms;

usingSystem.Data;

namespaceMyExcel

{

///<

summary>

///Form1的摘要说明。

/summary>

publicclassForm1:

System.Windows.Forms.Form

{

privateSystem.Windows.Forms.ButtonbtnNormal;

privateSystem.Windows.Forms.ButtonbtnAdvace;

///<

///必需的设计器变量。

privateSystem.ComponentModel.Containercomponents=null;

publicForm1()

//

//Windows窗体设计器支持所必需的

InitializeComponent();

//TODO:

在InitializeComponent调用后添加任何构造函数代码

///清理所有正在使用的资源。

protectedoverridevoidDispose(booldisposing)

if(disposing)

if(components!

=null)

components.Dispose();

base.Dispose(disposing);

#regionWindowsFormDesignergeneratedcode

///设计器支持所需的方法-不要使用代码编辑器修改

///此方法的内容。

privatevoidInitializeComponent()

this.btnNormal=newSystem.Windows.Forms.Button();

this.btnAdvace=newSystem.Windows.Forms.Button();

this.SuspendLayout();

//

//btnNormal

this.btnNormal.Location=newSystem.Drawing.Point(49,55);

this.btnNormal.Name="

btnNormal"

this.btnNormal.TabIndex=0;

this.btnNormal.Text="

this.btnNormal.Click+=newSystem.EventHandler(this.btnNormal_Click);

//btnAdvace

this.btnAdvace.Location=newSystem.Drawing.Point(169,55);

this.btnAdvace.Name="

btnAdvace"

this.btnAdvace.TabIndex=1;

this.btnAdvace.Text="

高级报表"

this.btnAdvace.Click+=newSystem.EventHandler(this.btnAdvace_Click);

//Form1

this.AutoScaleBaseSize=newSystem.Drawing.Size(6,14);

this.ClientSize=newSystem.Drawing.Size(292,133);

this.Controls.AddRange(newSystem.Windows.Forms.Control[]{

this.btnAdvace,

this.btnNormal});

this.Name="

Form1"

this.StartPosition=System.Windows.Forms.FormStartPosition.CenterScreen;

this.Text="

this.ResumeLayout(false);

#endregion

///应用程序的主入口点。

[STAThread]

staticvoidMain()

Application.Run(newForm1());

//普通报表,即单纯的文件导出功能

privatevoidbtnNormal_Click(objectsender,System.EventArgse)

//高级报表,根据模板生成的报表

privatevoidbtnAdvace_Click(objectsender,System.EventArgse)

stringfilename="

//将模板文件复制到一个新文件中

SaveFileDialogmySave=newSaveFileDialog();

mySave.Filter="

Excel文件(*.XLS)|*.xls|所有文件(*.*)|*.*"

if(mySave.ShowDialog()!

=DialogResult.OK)

return;

else

filename=mySave.FileName;

//将模板文件copy到新位置,建议实际开发时用相对路径,如Application.StartupPath.Trim()+"

\\report\\normal.xls"

stringfilenameold=mySave.FileName;

FileInfomode=newFileInfo("

d:

\\normal.xls"

);

try

mode.CopyTo(filename,true);

catch(Exceptionee)

MessageBox.Show(ee.Message);

return;

//打开复制后的文件

objectmissing=Missing.Value;

Excel.ApplicationmyExcel=newExcel.Application();

//打开新文件

myExcel.Application.Workbooks.Open(filename,

missing,

missing);

//将Excel显示出来

//逐行写入数据,数组中第一行我列标题,忽略

for(inti=1;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1