【澳门葡京备用网址】不大概访问已关闭的流化解方式,js中的冒出的bug

【澳门葡京备用网址】不大概访问已关闭的流化解方式,js中的冒出的bug。毕生做项目进程中时常会遇到一些导入导出的效果,明天偶得一小空 整理一下

NPOI 导出excel三种方法 和 错误 不恐怕访问已关门的流消除格局,npoiexcel

毕生做项目进度中不时会赶过有的导入导出的功能,明天偶得一小空 整理一下

(假若有畸形的地点还请我们指正,平日消除难题就随手记录一下,以便于别的的同伙参考)

第三如下基础的档期的顺序经过图:

1.基础的协调营造的html

澳门葡京备用网址 1

2.jQuery.Upload插件

澳门葡京备用网址 2澳门葡京备用网址 3

好,入核心,前日任重(英文名:rèn zhòng)而道远记录一下下运载飞机能,以NPOI下载方法为例

下载其实方法多多,每一种人大概都有本身的常用方法,但小编倍感下载无非三种办法,

一.一贯手动生成一份文档,填充数据,下载

HSSFWorkbook book = new HSSFWorkbook();
            ISheet sheet = book.CreateSheet("举例下载");

            sheet.SetColumnWidth(0,16*256);//设置第一列的宽度
            sheet.SetColumnWidth(1,12 * 256);//设置第二列的宽度

            for (int rowId = 0; rowId <= 10; rowId++)
            {
                IRow row = sheet.CreateRow(rowId);
                for (int i = 0; i < 2; i++)
                {
                    ICell cell = row.CreateCell(i);
                    cell.SetCellType(CellType.String);
                    cell.SetCellValue("测试"+i);
                }
            }
            var ms = new MemoryStream();
            book.Write(ms);
            ms.Flush();
            ms.Position = 0;
            string fileName = "测试举例.xls";
            return File(ms, "application/vnd.ms-excel", fileName);

 

2.加载预订义的壹份模板文件,填充数据,下载

//读模板的方式加载
                string filePath = System.Web.HttpContext.Current.Server.MapPath("~/Template/BasicInfoTemplete.xlsx");
                IWorkbook workbook;
                FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read);
                workbook = WorkbookFactory.Create(fs);

                ISheet sheet = workbook.GetSheetAt(0);//获取Excel中的第一个Sheet
                ICellStyle cellStyle = workbook.CreateCellStyle();

                //设置单元格上下左右边框线  
                cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                //文字水平和垂直对齐方式  
                cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;

                ICell Cell = null;
                IRow row = null;

                for (int i = 2; i < 10; i++)
                {
                    row = sheet.CreateRow(i);
                    for (int j = 1; j <= 5; j++)
                    {
                        Cell = row.CreateCell(j);
                        Cell.CellStyle = cellStyle;
                        Cell.SetCellValue(i+"测试举例"+j);
                    }
                }

                var ms = new NpoiMemoryStream();
                ms.AllowClose = false;
                workbook.Write(fs);
                workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;
                ms.AllowClose = false;
                return File(ms, "application/vnd.ms-excel", "测试举例.xlsx");

html中调用

<a href="/UploadCarInfo/DownLoadBasicInfo" target="ajaxDownload"><i class="fa fa-download"></i> 车型参考</a>

<iframe name="ajaxDownload" style="display:none"></iframe>

上述都以很基础的,举例其余的一些证实或try
catch什么的暂未全部列出,比方有何公共艺术TableToExcel等怎样一些公家措施英特网一找一大堆,笔者就未1一列出切实可行下载细节;

 

第一种方法恐怕会赶过【不能访问已关门】那样的主题材料,所以如代码所示NpoiMemoryStream这么些类,小编继续自MemoryStream这么些系统类,重写系统类中
关闭流的不得了格局(Close),改为自身能够手动调整就可以消除难点;

 

民用总结:境遇难题往往不是第目前间去搞定难题,除非你拾贰分熟练了;替代它而是去思索一下标题标缓慢解决思路,有的难题无非就那几个套路,具体里面怎么消除自己想面试的时候
也不会问的要命详细吧……

 

导出excel二种艺术 和 错误
不可能访问已关门的流消除格局,npoiexcel
平常做项目进程中不时会超越有的导入导出的意义,今日偶得一小空…

引言

近年来在2个类型中,在用户列表中须要对给没有签署样本的各自用户上传签字的范本,就想开和讯中上传图片应用弹出框格局,微博具体怎么落到实处的不知道,只是假设自身来弄,想到四个插件的重组使用,在弹出框中使用uploadify插件进行上传,每回都会报错相当无语,最终找到化解方案,这里记录一下,算是对工作中相见的bug的一个总括。

(假如有畸形的地点还请我们指正,日常减轻难题就顺手记录一下,以福利其余的同伙参考)

bug

澳门葡京备用网址 4

那是vs调节和测试境况下,彰显的新闻。在浏览器端,点击第二次上传按键,日常,将弹出框关闭后,第3遍张开,就能够冒出难点:

先是次单击上传:

澳门葡京备用网址 5

其次次,关闭弹出框,再度单击上传:

澳门葡京备用网址 6

单击是:

try { 
document.getElementById("SWFUpload_0").SetReturnValue(__flash__toXML(SWFUpload.instances["SWFUpload_0"].testExternalInterface; 
} 
catch  { document.getElementById("SWFUpload_0").SetReturnValue("<undefined/>"); }

F12

澳门葡京备用网址 7

调试

澳门葡京备用网址 8

正是其一标题,胃痛啊,在其余浏览器平日,在ie下被坑死了。

不能够只好想办法缓和啊。

那地点出现谬误“null”为空或不是目的bug,猜想是找不到flash的id(SWFUpload_0)了,所以出现null,就能够出现那么些bug。

率先如下基础的种类进程图:

连锁代码

head标签内的js,代码不再表达,写有注释:

 1     <style type="text/css"> 2         /*隐藏上传的进度条*/ 3         .uploadify-queue { 4             display: none; 5         } 6     </style> 7     <script type="text/javascript" src="Scripts/jquery-1.10.2.js"></script> 8     <link href="Scripts/uploadify/css/uploadify.css" rel="stylesheet" /> 9     <script type="text/javascript" src="Scripts/uploadify/js/uploadify3.2.1/jquery.uploadify.js"></script>10     <link href="Scripts/JqueryUI/css/redmond/jquery-ui-1.10.4.custom.css" rel="stylesheet" />11     <script type="text/javascript" src="Scripts/JqueryUI/js/jquery-ui-1.10.4.custom.js"></script>12     <script type="text/javascript">13         $(function () {14 15             //弹出框的初始化方法16             $("#dialog").dialog({17 18                 // 初始化之后,是否立即显示对话框,默认为 true19                 autoOpen: false,20 21                 //设置弹出框的高度 400px22                 width: 400,23 24                 //是否模式对话框,默认为 false25                 modal: true,26 27                 //是否允许拖动,默认为 true28                 draggable: true,29 30                 //是否可以调整对话框的大小,默认为 true31                 resizable: true,32 33                 //弹出框的标题34                 title: "上传签名样本",35 36                 /*用来设置对话框的位置,有三种设置方法 37                      1.  一个字符串,允许的值为  'center', 'left', 'right', 'top', 'bottom'.  38                      此属性的默认值即为 'center',表示对话框居中。39                      2.  一个数组,包含两个以像素为单位的位置,例如, var dialogOpts = { position: [100, 100] };40                      3. 一个字符串组成的数组,例如, ['right','top'],表示对话框将会位于窗口的右上角。41                      例如:var dialogOpts = {  position: ["left", "bottom"]    };*/42                 position: "center",43                 close: function () {44                  45                     //if ($('#btnUpload').length > 0) { //注意jquery下检查一个元素是否存在必须使用 .length >0 来判断46 47                     //    $('#btnUpload').uploadify('destroy');48 49                     //} 50                 }51 52             });53         });54     </script>

html

1   <div id="dialog" title="上传签名样本" style="text-align: center; display:none; ">2                 <input type="button" name="name" id="btnUpload" value="上传样本" />3                 (只能上传.sign格式文件)4             </div>

最终是uploadify代码,列表中的a标签实在cs文件拼接的,这里不再列出,uploadify放在html标签前面:

 1     function Upload { 2         //打开弹出框的按钮 3         //单击按钮 调用弹出框的open方法 4         $("#dialog").dialog("open"); 5  6         //上传 7         //上传插件初始化方法 8         $('#btnUpload').uploadify({ 9 10             //选择文件后是否自动上传,默认为true11             'auto': true,12             //选择文件按钮   13             'buttonClass': 'some-class',14 15             //设置按钮文本16             'buttonText': '上传样本',17 18             //单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值 上传大文件 可参考使用手册说明               19             'fileSizeLimit': '0',20             'queueSizeLimit': 1,21             //文件描述22             'fileTypeDesc': 'Files',23             'multi': false,24             //允许上传的文件类型 以分号分割25             'fileTypeExts': '*.sign',26             'onUploadStart': function  {27                 $("#btnUpload").uploadify("settings", "formData", { 'code': strCode });28             },29             //FLash文件路径30             'swf': '/Scripts/uploadify/js/uploadify3.2.1/uploadify.swf',31             //上传文件处理后台页面32             'uploader': '/Ashx/SampleUp.ashx?action=mainUpload',33             //上传成功后触发,每个文件都触发34             'onUploadSuccess': function (file, data, response) {35                 window.location.reload();36 37             }38         });39     }

一.基础的友善营造的html

解决方案

方法一

开端想了,既然刷新一下就不会油不过生该bug,就在弹出框关闭时将页面刷新。在弹出框的close的回调方法中增添代码:window.location.reload();每一趟弹出框关闭时,加个页面重新刷新一下,纵然减轻了难题,但是,用户体验并不佳,每回刷新,就能够再也去读1遍数据库,最终放任了这一个措施。

方法二

在弹出框的close的回调方法中,增加如下代码:

1                 close: function () {2                  3                     if ($('#btnUpload').length > 0) { //注意jquery下检查一个元素是否存在必须使用 .length >0 来判断4                         $('#btnUpload').uploadify('destroy');//如果存在,则将其销毁5                     } 6                 }

再也测试,难题搞定。

标题一蹴即至了,为啥那就能够消除难点吧?

估算,第3遍单击上传,分公司方列出的代码,可见每单击上传,就能透过uploadify方法创制上传flash对象,此时$(‘#澳门葡京备用网址,btnUpload’).length=1,此时id为(SWFUpload_0))的目的已经规定,关闭弹出框,但falsh对象依然存在,并未灭绝。

重新单击的时

try { 
document.getElementById("SWFUpload_0").SetReturnValue(__flash__toXML(SWFUpload.instances["SWFUpload_0"].testExternalInterface; 
} 
catch  { document.getElementById("SWFUpload_0").SetReturnValue("<undefined/>"); }

澳门葡京备用网址 9

不更创制id为(SWFUpload_0))的flash对象,依旧第3次创设的flash对象占着茅坑非常的小便(占着id,但名从未创设对象),所以此时为null,为了保险id的唯一性?,ie对此有限制?,是还是不是其余浏览器,在id存在的地方下,会随机生成一个新的id?不是搞前端的,一无所知了。

那也是团结的测度,有高手的话,能够给个官方的传道,假若本人那几个猜测创设,那么也从侧面印证了为啥刷新一下,就从未有过这么些bug了,刷新又重新加载html并且销毁了flash对象,单击上传又成为了第一次单击。

澳门葡京备用网址 10

总结

那只是3个在工作中蒙受的标题,说大非常的小说小一点都不小,只是碰着问题了,并对此主题材料部分设法,总括一下。

相对个人主张,未有论证,倘若您对前者相比较在行,能够留个脚踏过的印迹给个合法的布道,再一次谢过了。

2.jQuery.Upload插件

澳门葡京备用网址 11澳门葡京备用网址 12

好,入主旨,今日根本记录一下下载机能,以NPOI下载方法为例

下载其实方法多多,各样人想必都有温馨的常用方法,但本人备感下载无非三种办法,

一.直接手动生成壹份文书档案,填充数据,下载

HSSFWorkbook book = new HSSFWorkbook();
            ISheet sheet = book.CreateSheet("举例下载");

            sheet.SetColumnWidth(0,16*256);//设置第一列的宽度
            sheet.SetColumnWidth(1,12 * 256);//设置第二列的宽度

            for (int rowId = 0; rowId <= 10; rowId++)
            {
                IRow row = sheet.CreateRow(rowId);
                for (int i = 0; i < 2; i++)
                {
                    ICell cell = row.CreateCell(i);
                    cell.SetCellType(CellType.String);
                    cell.SetCellValue("测试"+i);
                }
            }
            var ms = new MemoryStream();
            book.Write(ms);
            ms.Flush();
            ms.Position = 0;
            string fileName = "测试举例.xls";
            return File(ms, "application/vnd.ms-excel", fileName);

 

二.加载预订义的壹份模板文件,填充数据,下载

//读模板的方式加载
                string filePath = System.Web.HttpContext.Current.Server.MapPath("~/Template/BasicInfoTemplete.xlsx");
                IWorkbook workbook;
                FileStream fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read);
                workbook = WorkbookFactory.Create(fs);

                ISheet sheet = workbook.GetSheetAt(0);//获取Excel中的第一个Sheet
                ICellStyle cellStyle = workbook.CreateCellStyle();

                //设置单元格上下左右边框线  
                cellStyle.BorderTop = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderBottom = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderLeft = NPOI.SS.UserModel.BorderStyle.Thin;
                cellStyle.BorderRight = NPOI.SS.UserModel.BorderStyle.Thin;
                //文字水平和垂直对齐方式  
                cellStyle.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;
                cellStyle.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;

                ICell Cell = null;
                IRow row = null;

                for (int i = 2; i < 10; i++)
                {
                    row = sheet.CreateRow(i);
                    for (int j = 1; j <= 5; j++)
                    {
                        Cell = row.CreateCell(j);
                        Cell.CellStyle = cellStyle;
                        Cell.SetCellValue(i+"测试举例"+j);
                    }
                }

                var ms = new NpoiMemoryStream();
                ms.AllowClose = false;
                workbook.Write(fs);
                workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;
                ms.AllowClose = false;
                return File(ms, "application/vnd.ms-excel", "测试举例.xlsx");

html中调用

<a href="/UploadCarInfo/DownLoadBasicInfo" target="ajaxDownload"><i class="fa fa-download"></i> 车型参考</a>

<iframe name="ajaxDownload" style="display:none"></iframe>

如上都以很基础的,比方其余的部分验证或try
catch什么的暂未全体列出,比方有哪些公共艺术TableToExcel等什么一些共用措施网上一找一大堆,作者就未1一列出切实可行下载细节;

 

第三种方法也许会遭受【不能访问已关门】这样的难点,所以如代码所示NpoiMemoryStream这么些类,笔者继续自MemoryStream那几个系统类,重写系统类中
关闭流的丰盛格局(Close),改为本人能够手动调节就能够缓慢解决难点;

 

私家计算:遇到难点往往不是第目前间去消除难题,除非您非常纯熟了;代替他而是去思维一下标题标化解思路,有的标题只是就那贰个套路,具体里面怎么消除自个儿想面试的时候
也不会问的10分详细吧……

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website