生成二维码并导出到excel表_hssfworkbook导出二维码-程序员宅基地

技术标签: C#  有趣的需求  二维码  



**工作中用到了二维码_生成二维码并导出到excel表.
这里完整做了一下,巩固知识。**

实现效果:在页面上输入字符串,后台处理生成对应的二维码,将二维码作为图片保存,并且在页面显示出来。

前期:用到三方插件ThoughtWorks.QRCode,下载引用。插件生成二维码的类已经很完善,在这里OOXX搬运下就行。

   /// <summary>
   /// 根据提交的内容显示二维码
   /// </summary>        
        protected void btn_Click(object sender, EventArgs e)
        {
            QRCodeEncoder enCoder = new QRCodeEncoder();
            enCoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
            enCoder.QRCodeBackgroundColor = Color.White;
            enCoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
            enCoder.QRCodeScale = 4;//等级越大像素越高
            enCoder.QRCodeVersion = 7;
            //生成了二维码图片
            Bitmap map = enCoder.Encode(txtUrl.Text.Trim());
            //将图片保存在本地
            string filePath = @"F:\google下载\QRCode\";
            if (!Directory.Exists(filePath))
            {
                Directory.CreateDirectory(filePath);
            }
            string imgName=Guid.NewGuid().ToString().Replace("-","");
            string Path=filePath + imgName + ".png";
            map.Save(Path);            
            map.Dispose();
            img.ImageUrl = "http://****:55/" + imgName + ".png";

        }

效果:这里写图片描述
备注:生成二维码图片保存到本地后,我没有想到好的方法呈现在页面,只是在iis上 将保存图片的文件夹发出来在直接访问。对此,期待指点。

下面是将二维码导出到excel 表处理
//将数据整合生成excel

public static MemoryStream DealData(List<NewList> DataList)
        {
            HSSFWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("Sheet1");
            //10列
            sheet.SetColumnWidth(0, 8 * 256 + 200);
            sheet.SetColumnWidth(1, 8 * 256 + 200);
            sheet.SetColumnWidth(2, 8 * 256 + 200);
            sheet.SetColumnWidth(3, 8 * 256 + 200);
            sheet.SetColumnWidth(4, 8 * 256 + 200);
            sheet.SetColumnWidth(5, 8 * 256 + 200);
            sheet.SetColumnWidth(6, 8 * 256 + 200);
            sheet.SetColumnWidth(7, 8 * 256 + 200);
            sheet.SetColumnWidth(8, 8 * 256 + 200);
            sheet.SetColumnWidth(9, 20 * 256 + 200);//图片列

            //通用样式
            ICellStyle headStyle = workbook.CreateCellStyle();
            headStyle.Alignment = HorizontalAlignment.Left;
            headStyle.VerticalAlignment = VerticalAlignment.Center;
            IFont font = workbook.CreateFont();
            font.FontHeightInPoints = 10;
            font.Boldweight = 30;
            headStyle.SetFont(font);

            int rowIndex = 0;

            #region 表头及样式
            {
                IRow headerRow = sheet.CreateRow(rowIndex);
                headerRow.HeightInPoints = 20;                
                string[] Header = { "单位", "编码", "厂家", "型号", "功率", "启用日期", "操作人", "操作时间", "油机状态", "二维码" };
                for (int i = 0; i < Header.Length; i++)
                {
                    headerRow.CreateCell(i).SetCellValue(Header[i]);
                    headerRow.GetCell(i).CellStyle = headStyle;
                }
                rowIndex++;
            }
            #endregion
            #region 填充数据
            for (int j = 0; j <DataList.Count() ; j++)
            {
                IRow rows = sheet.CreateRow(rowIndex);
                rows.HeightInPoints = 110;//二维码原大小呈现,行高大
                int num = 0;//列指针
                rows.CreateCell(num).SetCellValue(DataList[j].Orgname);//单位
                rows.GetCell(num++).CellStyle = headStyle;
                rows.CreateCell(num).SetCellValue(DataList[j].Engine.Num);//编码
                rows.GetCell(num++).CellStyle = headStyle;
                rows.CreateCell(num).SetCellValue(DataList[j].Engine.Manufactor);//厂家
                rows.GetCell(num++).CellStyle = headStyle;
                rows.CreateCell(num).SetCellValue(DataList[j].Engine.Model);//型号
                rows.GetCell(num++).CellStyle = headStyle;
                rows.CreateCell(num).SetCellValue(DataList[j].Engine.Power.HasValue ? DataList[j].Engine.Power.ToString() : "");//功率
                rows.GetCell(num++).CellStyle = headStyle;
                rows.CreateCell(num).SetCellValue(DataList[j].Engine.EnableTime.HasValue ? DataList[j].Engine.EnableTime.ToString() : "");//启用日期
                rows.GetCell(num++).CellStyle = headStyle;
                rows.CreateCell(num).SetCellValue(DataList[j].realityName);//操作人
                rows.GetCell(num++).CellStyle = headStyle;
                rows.CreateCell(num).SetCellValue(DataList[j].Engine.DateInfo.ToString());//操作时间
                rows.GetCell(num++).CellStyle = headStyle;
                rows.CreateCell(num).SetCellValue(DataList[j].MachineStateText);//油机状态                
                rows.GetCell(num++).CellStyle = headStyle;
                //处理二维码图片
                AddPieChartMerage(sheet, workbook, DataList[j].Engine.QRCodePhoto, rowIndex, num, 0,true);
                rowIndex++;
            }
            #endregion

            using (MemoryStream ms = new MemoryStream())
            {
                workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;
                sheet = null;
                workbook = null;
                return ms;
            }
        }

处理图片

///totalFileURL 图片完整路径  
 private static void AddPieChartMerage(ISheet sheet, HSSFWorkbook workbook, string totalFileURL, int row, int col, int MerageColCount,bool isResize=false)
        {
            try
            {
                HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();
                //处理照片位置,【图片左上角为(col, row)第row+1行col+1列,右下角为( col +1, row +1)第 col +1+1行row +1+1列,宽为100,高为50
                HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0, 100, 50, col, row, col + 1, row + 1);
                int i = 0;
                foreach (var fileurl in totalFileURL.Split(';'))
                {
                    string path = fileurl;
                    byte[] bytes = System.IO.File.ReadAllBytes(path);
                    if (!string.IsNullOrEmpty(path))
                    {
                        int pictureIdx = workbook.AddPicture(bytes, NPOI.SS.UserModel.PictureType.JPEG);
                        anchor = new HSSFClientAnchor(i * 100, 0, i * 100 + 100, 0, col, row, col + 1 + MerageColCount, row + 1);

                        HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
                        if (isResize)//是否显示图片原大小
                        {
                           pict.Resize();
                        }
                    }
                    i++;
                }
            }
            catch (Exception)
            {
                //throw ex;
            }
        }

效果:这里写图片描述

Mark:
生成待logo的二维码:http://www.jb51.net/article/104639.htm
二维码的编码/解码:https://www.cnblogs.com/xuhang/p/3832118.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_25333005/article/details/79296061

智能推荐

STM32入门-GPIO端口的八种工作模式_gpio的8种工作模式-程序员宅基地

文章浏览阅读5.7w次,点赞428次,收藏2.2k次。新手必看,超讲解详细GPIO端口的八种工作模式_gpio的8种工作模式

QGIS基本功| 8 初识数据源_qgis qml-程序员宅基地

文章浏览阅读3k次,点赞2次,收藏10次。初次接触GIS的朋友,常常弄不清数据源(Data Source)和图层(Layer)的区别与联系,导致在数据处理和分发时出现一些问题,例如:辛辛苦苦做出了一幅漂亮的地图,为什么再次打开数据时,地图又变回丑陋的样子?怎么才能把工作成果分发给同事,让他打开数据时效果跟我本机一模一样?回答这些问题,我们需要从数据源的基本概念说起。本文从数据源和图层的区别与联系、打开数据源管理器、数据源管理器界面介绍和QGIS支持打开的数据源类型等方面,整体上初步介绍数据源相关知识。后续将陆续推出文章,详细介绍.._qgis qml

kaldi yesorno案例学习记录_local/prepare_lm.sh: line 7: 19989-程序员宅基地

文章浏览阅读270次。学习自Kaldi-yesno详解先来学习run.sh脚本#!/bin/bashtrain_cmd=“utils/run.pl”decode_cmd=“utils/run.pl”#-d filename 判断filename是否为目录,是为真,即下面的是如果waves_yesorno部署目录,去网站下载,||逻辑或,如果前面的语句执行成功,后面的就不执行了,如果前面的出问题,就异常退出(exit 0 代表正常运行程序并退出程序,exit 1 代表非正常运行导致退出程序。其实目的就是: 程序退出后, _local/prepare_lm.sh: line 7: 19989

《专题五 容器化微服务》之《第三章 云原生DevOps》之《第二节 监控》-程序员宅基地

文章浏览阅读181次。我:es的index类似kafka的topic, es的shard类似kafka的partition,副本类似kafka的副本(除了es当有多个请求需要访问同一个index时,各shard的多副本上可并行搜索;相比之下,kafka的partition只能分配给一个消费者组里的一个消费者)20:40 filebeat对k8s的支持:通过监听k8s事件,自动采集容器的标准输出。10 30+ 容器与Kubernetes里的日志,与传统主机模式下的日志有较大区别。13 55+ Filebeat采集容器化日志。

一文带你快速了解业务流程分析和流程建模_系统业务流程介绍与分析-程序员宅基地

文章浏览阅读2.2k次。有哪些业务流程?业务流程如何完成?业务流程有谁参与?流程中有哪些控制流(如判断、同步分支和会合)?多个不同流程建的关系?完成流程所用的资源等。_系统业务流程介绍与分析

nmos导通流向_MOS管-程序员宅基地

文章浏览阅读6.5k次,点赞3次,收藏14次。MOS管P管。通常S接电源。G控制信号,D接负载。当G等于S时。S和D不导通当G小于一定S D和S导通。N管S接地,G接控制,D接电流节点1. MOS管开关电路学习过模拟电路的人都知道三极管是流控流器件,也就是由基极电流控制集电极与发射极之间的电流;而MOS管是压控流器件,也就是由栅极上所加的电压控制漏极与源极之间电流。MOSFET管是FET的一种,可以被制造为增强型或者耗尽型,P沟道或N沟道共四..._nmos导通

随便推点

2024年阿里云服务器地域选择方法_地域城市分布表-程序员宅基地

文章浏览阅读639次,点赞22次,收藏20次。阿里云服务器地域选择方法,如何选择速度更快、网络延迟更低的地域节点,地域指云服务器所在的地理位置区域,地域以城市划分,如北京、杭州、深圳及上海等,如何选择地域?建议根据用户所在地区就近选择地域,用户距离地域所在城市越近,网络延迟越低,速度越快。阿里云服务器网aliyunfuwuqi.com从速度延迟、备案限制、多产品内网互通、不同地域价格等四点因素来考虑地域的选择因素,可以在阿里云CLUB中心查看当前最新的云服务器优惠券和配置报价表。

【云驻共创】云原生应用架构之企业核心业务未来架构演进路线及华为云方案_基于云原生架构构建核心业务支撑系统应用试点研究-程序员宅基地

文章浏览阅读2.6w次,点赞4次,收藏9次。文章目录前言前言本文整理自华为云社区【内容共创】活动第14期。查看活动详情:https://bbs.huaweicloud.com/blogs/336904相关任务详情:任务16.企业核心业务未来架构演进路线及华为云方案_基于云原生架构构建核心业务支撑系统应用试点研究

实验十九、利用运算电路解方程_利用运算电路求解方程的方法研究-程序员宅基地

文章浏览阅读882次。运算电路求解一元二次方程_利用运算电路求解方程的方法研究

Vue3+ElementPlus 根据路由 自动创建二级菜单_vue 项目 element新增菜单下级页面-程序员宅基地

文章浏览阅读334次,点赞5次,收藏4次。本人分享一下这次字节跳动、美团、头条等大厂的面试真题涉及到的知识点,以及我个人的学习方法、学习路线等,当然也整理了一些学习文档资料出来是附赠给大家的。知识点涉及比较全面,包括但不限于前端基础,HTML,CSS,JavaScript,Vue,ES6,HTTP,浏览器,算法等等详细大厂面试题答案、学习笔记、学习视频等资料领取,点击资料领取直通车》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**_vue 项目 element新增菜单下级页面

linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;_linux按照mysql数据库配置表名不区分大小写-程序员宅基地

文章浏览阅读1.2k次。1、linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写; 2、用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加lower_case_table_names=1,重启MYSQL服务,这时已设置成功:不区分表名的大小写; lower_case_table_names参数详解: lower_case_table_names = 0 其_linux按照mysql数据库配置表名不区分大小写

关于JAVA核心技术(卷一)读后的思考(接口的基本知识的讨论)-程序员宅基地

文章浏览阅读118次。接口接口技术:这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口对象。接口概念:接口不是类,而是对类的一组需求的描述,这些类要遵从接口描述的统一格式进行定义。举个简单的例子:假设有一个类A,其中有一个sort方法是对对象数组进行排序,但要求对象所属的类必须实现了 B接口。假设B接口定义如下..._接口的定义中,对接口的域和方法有什么要求