如何在没有office下导出xlsx文件

jhone99 2017-09-13 04:33:39
需要在没有office的电脑导出xlsx文件,
用Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0的方式,行数多于65000会出错,
用stream方式只能是xls,
有什么好方法?
先,谢谢了!
...全文
791 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
ManBOyyy 2017-09-19
  • 打赏
  • 举报
回复
没有office只能用NPOI
zbdzjx 2017-09-19
  • 打赏
  • 举报
回复
引用 18 楼 jhone99 的回复:
[quote=引用 12 楼 zbdzjx 的回复:] 如果不需要格式,可以试试导出CSV格式。
含CSV、EXCEL两种方式, 我想办法扩展名改成xlsx打开不正常 CSV间隔用“,” xls间隔用“\t” xlsx间隔用什么?[/quote] 刚试了,CSV格式,TAB间隔,扩展名为xlsx,用excel 2010是打不开。但是,扩展名为xls,用excel 2010就可以正常打开了。(里面有50万行记录)
xiaoqiang_gao 2017-09-19
  • 打赏
  • 举报
回复
NPOI 正解
绿领巾童鞋 2017-09-19
  • 打赏
  • 举报
回复
npoi 那么 出名都不知道 。。。
大然然 2017-09-19
  • 打赏
  • 举报
回复
你变通一下嘛 ,导之前你肯定知道行数,你分成几份导就可以了, 001文件 1-2W 002文件 2W-4W
  • 打赏
  • 举报
回复
引用 17 楼 jhone99 的回复:
[quote=引用 11 楼 cyg17173 的回复:] 认真负责好前辈。 以下引用: 测试结果显示,相同数据结构的数据,EPPlus的导出能力比NPOI强。 20列,NPOI能导出4万数据,导出5万数据时报内存溢出。 EPPlus能导出20万以上数据,导出23万测试时内存溢出。
客户要求100万行,而且怕EPPlus会有商业纠纷。 目前导出excel的xlsx采用DB的方式,用Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties='Excel 12.0 Xml;HDR=YES' 在没有office的电脑,不支持这个,就只能导出CSV [/quote] 100万用NPOI完全没问题,这个链接我看了下,他把数据存到MemoryStream内存流里,数据太多能不溢出吗,正确应该使用文件流

               using (FileStream fs = new FileStream(@"test.xlsx", FileMode.Create))
                {
                    workbook.Write(fs);
                }
                
APP开发王 2017-09-18
  • 打赏
  • 举报
回复
导出XML 符合xls 格式就了,保存扩展名为.xls
by_封爱 版主 2017-09-18
  • 打赏
  • 举报
回复
100W行的xls 你能说出他的意义在哪吗? 客户电脑能打开含有100W数据的的xls. 自己用bcp生成一个100W数据的xls 在自己电脑打开一下 在说吧. 总有人为这无聊的需求买单. 上次有一个人跟你一样.. 比你还厉害的多呢, 说要把10E数据导出到xlsx里面... 现在..估计转行了吧.
吉普赛的歌 2017-09-18
  • 打赏
  • 举报
回复
jhone99 2017-09-18
  • 打赏
  • 举报
回复
引用 12 楼 zbdzjx 的回复:
如果不需要格式,可以试试导出CSV格式。
含CSV、EXCEL两种方式, 我想办法扩展名改成xlsx打开不正常 CSV间隔用“,” xls间隔用“\t” xlsx间隔用什么?
jhone99 2017-09-18
  • 打赏
  • 举报
回复
引用 11 楼 cyg17173 的回复:
认真负责好前辈。 以下引用: 测试结果显示,相同数据结构的数据,EPPlus的导出能力比NPOI强。 20列,NPOI能导出4万数据,导出5万数据时报内存溢出。 EPPlus能导出20万以上数据,导出23万测试时内存溢出。
客户要求100万行,而且怕EPPlus会有商业纠纷。 目前导出excel的xlsx采用DB的方式,用Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties='Excel 12.0 Xml;HDR=YES' 在没有office的电脑,不支持这个,就只能导出CSV
Amayerday 2017-09-15
  • 打赏
  • 举报
回复
大部分都是为了兼容ie
Amayerday 2017-09-15
  • 打赏
  • 举报
回复
function tabletoExcel(mytable,allprice) { // getExplore()返回1,说明是不是Google Chrome、Firefox、Opera、Safari,那么就认为是IE了。(网上流传的判断IE的js代码好多在Win7无法使用。。。。。。 if (getExplorer() == 1) { //是IE的话,就调用toExcel()方法来导出Excel表格,不依赖微软的Excel产品。(toExcel()方法的定义见下面) toExcel(mytable, ''); return; } // 不是IE的话就调用下面的代码导出Excel文件 //获得id为mytable的table的html元素 var oldtable = document.getElementById(mytable); // 克隆(复制)此table元素,这样对复制品进行修改(如添加或改变table的标题等),导出复制品,而不影响原table在浏览器中的展示。 table = oldtable.cloneNode(true); // var html = $(table).html(); //var th = $(table).find("th"); //var len_th = th.length; //for (var i = 0; i < len_th; i++) { // th.eq(i).find("td").eq(10).remove(); // th.eq(i).find("td").eq(0).remove(); //} var trList = $(table).find("tr"); var len = trList.length; for (var i = 0; i < len; i++) { var item = trList.eq(i); if (i==0) { item.find("th").eq(10).remove(); item.find("th").eq(0).remove(); } else { if (item.hasClass("selected")) { item.find("td").eq(10).remove(); item.find("td").eq(0).remove(); } else { item.remove(); } } } var newleng = $(table).find("tr").length; if (newleng<=1) { alert("当前没有选中任何项"); return false; } var row_all = '<tr> \ <td>本金统计<td/>\ <td><td/>\ <td><td/>\ <td><td/>\ <td>'+allprice+'<td/>\ <td><td/>\ <td><td/>\ <td><td/>\ <td><td/>\ </tr>' $(table).find("tbody").append(row_all); // console.log($(table).html()) //下面五行代码就是用来改变table中的某些信息的,不需要的话可以注释,或修改。 var name = "马尔科夫信息统计表"; var caption_orig = table.getElementsByTagName("caption"); $(caption_orig).text(name); // var th_first_ele = table.getElementsByTagName("th")[0]; // th_first_ele.innerHTML = "编号"; // 下面的代码才是真正用来将html table导出Excel表格(我从stackoverflow上看到的,修改了一点点,不会再有中文乱码问题了。) var uri = 'data:application/vnd.ms-excel;base64,' , template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><?xml version="1.0" encoding="UTF-8" standalone="yes"?><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table style="vnd.ms-excel.numberformat:@">{table}</table></body></html>' , base64 = function (s) { return window.btoa(unescape(encodeURIComponent(s))); } , format = function (s, c) { return s.replace(/{(\w+)}/g, function (m, p) { return c[p]; }); }; if (!table.nodeType) table = document.getElementById(table); var ctx = { worksheet: name || 'Worksheet', table: table.innerHTML }; window.location.href = uri + base64(format(template, ctx)); } // 判断浏览器类型 返回1表示IE function getExplorer() { var explorer = window.navigator.userAgent; if (explorer.indexOf("MSIE") >= 0) { return 1; } else if (explorer.indexOf("Firefox") >= 0) { return 0; } else if (explorer.indexOf("Chrome") >= 0) { return 0; } else if (explorer.indexOf("Opera") >= 0) { return 0; } else if (explorer.indexOf("Safari") >= 0) { return 0; } else { return 1; } } // 下面的所有函数代码都是为了在IE上能导出Excel表格(不会出现js栈溢出等eggache的problem。。IE is so eggache!!!! function toExcel(inTblId, inWindow) { try { var allStr = ""; var curStr = ""; if (inTblId != null && inTblId != "" && inTblId != "null") { curStr = getTblData(inTblId, inWindow); } if (curStr != null) { allStr += curStr; } else { alert("您要导出的表不存在!"); return; } var fileName = getExcelFileName(); doFileExport(fileName, allStr); } catch (e) { alert("导出发生异常:" + e.name + "->" + e.description + "!"); } } function getTblData(inTbl, inWindow) { var caption_str = ""; var rows = 0; var tblDocument = document; if (!!inWindow && inWindow != "") { if (!document.all(inWindow)) { return null; } else { tblDocument = eval(inWindow).document; } } var curTbl = tblDocument.getElementById(inTbl).cloneNode(true); if (inTbl == "mytable") { curTbl.getElementsByTagName("th")[0].innerHTML = "XXX的编号"; caption_str = $("#cur_title_date").text() + "XXX信息统计表"; } else if (inTbl == "detail_table") { curTbl.getElementsByTagName("th")[0].innerHTML = "XXXX"; caption_str = curTbl.getElementsByTagName("caption")[0].innerHTML.split("<br")[0]; } if (curTbl.rows.length > 65000) { alert('源行数不能大于65000行'); return false; } if (curTbl.rows.length <= 1) { alert('数据源没有数据'); return false; } var outStr = caption_str + " \n"; if (curTbl != null) { for (var j = 0; j < curTbl.rows.length; j++) { for (var i = 0; i < curTbl.rows[j].cells.length; i++) { if (i == 0 && rows > 0) { outStr += " \t"; rows -= 1; } var tc = curTbl.rows[j].cells[i]; if (j > 0 && tc.hasChildNodes() && tc.firstChild.nodeName.toLowerCase() == "input") { if (tc.firstChild.type.toLowerCase() == "checkbox") { if (tc.firstChild.checked == true) { //不是这里 outStr += "是" + "\t"; } else { outStr += "否" + "\t"; } outStr += "\t"; } } else { outStr += " " + curTbl.rows[j].cells[i].innerText + "\t"; } if (curTbl.rows[j].cells[i].colSpan > 1) { for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) { outStr += " \t"; } } if (i == 0) { if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) { rows = curTbl.rows[j].cells[i].rowSpan - 1; } } } outStr += "\r\n"; } } else { outStr = null; alert(inTbl + "不存在!"); } return outStr; } function getExcelFileName() { var d = new Date(); var curYear = d.getYear(); var curMonth = "" + (d.getMonth() + 1); var curDate = "" + d.getDate(); var curHour = "" + d.getHours(); var curMinute = "" + d.getMinutes(); var curSecond = "" + d.getSeconds(); if (curMonth.length == 1) { curMonth = "0" + curMonth; } if (curDate.length == 1) { curDate = "0" + curDate; } if (curHour.length == 1) { curHour = "0" + curHour; } if (curMinute.length == 1) { curMinute = "0" + curMinute; } if (curSecond.length == 1) { curSecond = "0" + curSecond; } var fileName = "XX统计" + curYear + curMonth + curDate + curHour + curMinute + curSecond + ".xls"; return fileName; } function doFileExport(inName, inStr) { var xlsWin = null; if (!!document.all("glbHideFrm")) { xlsWin = glbHideFrm; } else { var width = 1; var height = 1; var openPara = "left=" + (window.screen.width / 2 + width / 2) + ",top=" + (window.screen.height + height / 2) + ",scrollbars=no,width=" + width + ",height=" + height; xlsWin = window.open("", "_blank", openPara); } xlsWin.document.write(inStr); xlsWin.document.close(); xlsWin.document.execCommand('Saveas', true, inName); xlsWin.close(); }
秋的红果实 2017-09-14
  • 打赏
  • 举报
回复
NPOI,这里有最全面的资料:http://blog.csdn.net/xxs77ch/article/details/50173283
homesos 2017-09-14
  • 打赏
  • 举报
回复
http://www.cnblogs.com/lazyneal/p/6148912.html 用NPOI,不需要安装office,xls、xlsx用不同的库,xls用HSSF, xlsx用XSSF。
by_封爱 版主 2017-09-14
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390830774 拿走不客气... 只是万恶的csdn下载好像被别人写了update语句,... 都是2分 当然你可以留下email 我发给你
ngym2011 2017-09-14
  • 打赏
  • 举报
回复
Aspose.cells 导出Excel 简单粗暴
ilikeff8 2017-09-14
  • 打赏
  • 举报
回复
如果只是纯数据导出, 有种极偷懒的做法 File.WriteAllText("a.xls",string.Format("1{0}2{0}3{1}4{0}5{0}6{1}", "\t", Environment.NewLine)); 你可以用excel打开他,并显示 1 2 3 4 5 6
zbdzjx 2017-09-14
  • 打赏
  • 举报
回复
如果不需要格式,可以试试导出CSV格式。
cyg17173 2017-09-14
  • 打赏
  • 举报
回复
引用 7 楼 yuhijk2055 的回复:
[quote=引用 6 楼 jhone99 的回复:] [quote=引用 4 楼 yuhijk2055 的回复:] NPOI 可以支持大于03版 EPPlus
NPOI 免费吗? [/quote] 前提:EPPlus免费 当你用过EPPlus后,你就不会去纠结NPOI免费不 http://www.cnblogs.com/tanpeng/p/6155749.html[/quote] 认真负责好前辈。 以下引用: 测试结果显示,相同数据结构的数据,EPPlus的导出能力比NPOI强。 20列,NPOI能导出4万数据,导出5万数据时报内存溢出。 EPPlus能导出20万以上数据,导出23万测试时内存溢出。
加载更多回复(7)

110,532

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧