在C#中利用Excel做高级报表Word文件下载.docx
- 文档编号:3769979
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:19
- 大小:237.97KB
在C#中利用Excel做高级报表Word文件下载.docx
《在C#中利用Excel做高级报表Word文件下载.docx》由会员分享,可在线阅读,更多相关《在C#中利用Excel做高级报表Word文件下载.docx(19页珍藏版)》请在冰点文库上搜索。
浙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
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;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 利用 Excel 高级 报表