当前位置: 首页 > article >正文

21.2.7 综合示例

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

【例 21.7【项目:code21-007】填充职员表并打印。

本例使用到的Excel文件为:职员信息登记表.xlsx,如下图所示:

图21-10 职员信息登记表

窗体设计如下图所示(注意:为了演示方便,已经填充了数据):

图21-11 窗体设计

在本例中还需要掌握的知识:

1、插入图片到指定位置

Worksheet.Shapes.AddPicture(Filename, LinkToFile, SaveWithDocument, Left, Top, Width, Height);

参数说明:

  1. Filename:必选,图片全路径。
  2. LinkToFile:必选,如果为True,则建立图片与其源文件之间的链接关系。否则,使图片成为其源文件的独立副本。通常设置为True。
  3. SaveWithDocument:必选,如果是True,则将图片与文档一起保存。否则,只链接到图片文件。通常设置为True。
  4. Left:必选,图片左上角相对于文档左上角的位置(以磅为单位)。
  5. Top:必选,图片左上角相对于文档顶部的位置(以磅为单位)。
  6. Width:必选,图片的宽度(以磅为单位)。
  7. Height:必选,图片的高度(以磅为单位)。

返回值:

  1. 一个代表新图片的Shape对象。

2、打印输出

Worksheet.PrintOutEx(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName, IgnorePrintAreas);

参数说明:

  1. From:可选,打印的开始页号。如果省略此参数,则从起始位置开始打印。
  2. To:可选,打印的终止页号。如果省略此参数,则打印至最后一页。
  3. Copies:可选,打印份数。如果省略此参数,则只打印一份。
  4. Preview:可选,如果为 True,将在打印前调用打印预览。如果为 False(或省略该参数),则立即打印。
  5. ActivePrinter:可选,设置活动打印机的名称,如果不设置,将使用默认打印机。
  6. PrintToFile:可选,如果为True,则打印到文件。如果没有指定 PrToFileName,将提示用户输入要使用的输出文件的文件名。
  7. Collate:可选,如果为True,则逐份打印多个副本。
  8. PrToFileName:可选,如果PrintToFile 设为True,则该参数指定要打印到的文件名。
  9. IgnorePrintAreas:可选,如果为True,则忽略打印区域并打印整个对象。

具体代码如下:

        //需要套用的模板文件

        string modelFile = "c:\\lessons\\职员信息登记表.xlsx";

        //输出Excel文件

        private void Button1_Click(object sender, EventArgs e)

        {

            //获得excel文件输出路径

            string modelfilePath = (new FileInfo(modelFile)).Directory.FullName;

            Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();

            Workbook Wbook = xls.Workbooks.Open(modelFile);

            Worksheet Wsheet;

            Wsheet = Wbook.Worksheets["sheet1"];

            //填充工作表各个单元格

            Wsheet.Cells[2, 2].value = txtXm.Text;

            Wsheet.Cells[2, 4].value = txtXb.Text;

            Wsheet.Cells[2, 6].value = txtMz.Text;

            Wsheet.Cells[2, 8].value = txtCsny.Text;

            Wsheet.Cells[3, 2].value = txtJkzk.Text;

            Wsheet.Cells[3, 4].value = txtSg.Text;

            Wsheet.Cells[3, 6].value = txtJg.Text;

            Wsheet.Cells[3, 8].value = txtHyzk.Text;

            Wsheet.Cells[4, 2].value = txtWhcd.Text;

            Wsheet.Cells[4, 4].value = txtByyx.Text;

            Wsheet.Cells[4, 7].value = txtSxzy.Text;

            Wsheet.Cells[5, 2].value = txtGzbm.Text;

            Wsheet.Cells[5, 4].value = txtZw.Text;

            Wsheet.Cells[5, 6].value = txtRzsj.Text;

            Wsheet.Cells[5, 8].value = txtZc.Text;

            Wsheet.Cells[6, 2].value = txtLxdz.Text;

            Wsheet.Cells[6, 5].value = txtLxdh.Text;

            Wsheet.Cells[7, 2].value = txtGrjl.Text;

            Wsheet.Cells[8, 2].value = txtQk.Text;

            Wsheet.Cells[9, 2].value = txtGrtc.Text;

            //插入图片

            int picWidth, picHeight;

            int picTop, picLeft;

            //图片高宽比单元格小4,注意由于是一个合并单元格,这里使用了MergeArea

            picWidth = (int)Wsheet.Range["I2"].MergeArea.Width - 4;

            picHeight = (int)Wsheet.Range["I2"].MergeArea.Height - 4;

            //图片左上角位置增加2

            picTop = (int)Wsheet.Range["I2"].Top + 2;

            picLeft = (int)Wsheet.Range["I2"].Left + 2;

            //插入图片

            Microsoft.Office.Interop.Excel.Shape picShape;

            //插入的图片位于Employee目录下,以职员名称命名

            picShape = Wsheet.Shapes.AddPicture(modelfilePath + "\\Employee\\" + txtXm.Text + ".jpg",

                 MsoTriState.msoTrue, MsoTriState.msoTrue, picLeft, picTop, picWidth, picHeight);

            //按照职员姓名保存文件

            Wbook.SaveAs(modelfilePath + "\\" + txtXm.Text + ".xlsx");   

            xls.Quit();

            MessageBox.Show("输出完成");

        }

        //打印

        private void Button2_Click(object sender, EventArgs e)

        {

            string modelfilePath = (new FileInfo(modelFile)).Directory.FullName;

            string xlsEmployeeFile = modelfilePath + "\\" + txtXm.Text + ".xlsx";

            string printFile = modelfilePath + "\\" + txtXm.Text + "1.oxps";

            Microsoft.Office.Interop.Excel.Application xls = new Microsoft.Office.Interop.Excel.Application();

            Workbook Wbook = xls.Workbooks.Open(xlsEmployeeFile);

            Worksheet Wsheet = Wbook.Worksheets[1];

            //可以使用PageSetup.Pages.Cpount获得总的页数,但是Excel要消耗时间和资源

            //这里由于只有一页,可以不考虑使用PageSetup.Pages.Cpount

            int pagecount = 1;   // Wsheet.PageSetup.Pages.Count

            //开始打印

            Wsheet.PrintOutEx(1, pagecount, 1, false, xls.ActivePrinter, true, true, printFile, true);

            xls.Quit();

            MessageBox.Show("打印完成");

        }

当按下“输出”按钮,将输出对应职员信息并保存为职员名字的xlsx文件。

当按下“打印”按钮,将输出的xlsx文件使用默认打印机进行打印,由于笔者计算机没有连接真实打印机,使用默认的“Microsoft XPS Document Writer”打印到文件,如果使用真实打印机,请修改PrintOutEx方法的参数,使之符合打印。

生成的xlsx文件效果如下:

图21-12 保存的Excel文件中的数据

打印的效果如下:

图21-13 打印生成的文件

本例中更适合从数据库中读取数据填入Excel中并打印,读取数据库填充数据,请参看第21.2.2节。还可以将输出数据与打印相结合,省略文件保存的步骤。

 

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看C#教程 目录


http://www.kler.cn/a/538411.html

相关文章:

  • 【MySQL】深度学习数据库开发技术:使用CC++语言访问数据库
  • DeepSeek-r1和O1、O3mini谁更强?
  • 嵌入式AI革命:DeepSeek开源如何终结GPU霸权,开启单片机智能新时代?
  • ssti学习笔记(服务器端模板注入)
  • 【redis】数据类型之hash
  • apisix的real-ip插件使用说明
  • 微信点餐系统小程序ssm+论文源码调试讲解
  • DeepSeek生成对抗网络(GAN)的训练与应用
  • 容器启动时报ssl错误解决办法
  • 保姆级AI开发环境搭建
  • Go语言的测试开发
  • 备战蓝桥杯:二进制枚举之子集问题
  • AI-学习路线图-PyTorch-我是土堆
  • Web3 开发者的机遇与挑战:技术趋势与职业发展
  • ASP.NET Core JWT Version
  • 【Emotion】打工路夜谈
  • 用 DeepSeek + Kimi 自动做 PPT,效率起飞
  • 鸿蒙 router.back()返回不到上个页面
  • [LeetCode]day17 349.两个数组的交集
  • 云计算架构师的学习成长路线
  • [C 语言篇】数据在内存中的存储
  • 2025牛客寒假算法基础集训营4(补题)
  • Swipe横滑与SwipeItem自定义横滑相互影响
  • 双向链表、内核链表和gdb(20250208)
  • Linux之kernel(1)系统基础理论(1)
  • FreeRTOS的事件组