- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章asp.net与excel互操作实现代码由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
代码如下
/// <summary> /// 将datatable中的数据导出到指定的excel文件中 /// </summary> /// <param name="page">web页面对象</param> /// <param name="tab">包含被导出数据的datatable对象</param> /// <param name="filename">excel文件的名称</param> public static void export(system.web.ui.page page,system.data.datatable tab,string filename) { system.web.httpresponse httpresponse = page.response; system.web.ui.webcontrols.datagrid datagrid=new system.web.ui.webcontrols.datagrid(); datagrid.datasource=tab.defaultview; datagrid.allowpaging = false; datagrid.headerstyle.backcolor = system.drawing.color.green; datagrid.headerstyle.horizontalalign = horizontalalign.center; datagrid.headerstyle.font.bold = true; datagrid.databind(); httpresponse.appendheader("content-disposition","attachment;filename="+httputility.urlencode(filename,system.text.encoding.utf8)); //filename="*.xls"; httpresponse.contentencoding=system.text.encoding.getencoding("gb2312"); httpresponse.contenttype ="application/ms-excel"; system.io.stringwriter tw = new system.io.stringwriter() ; system.web.ui.htmltextwriter hw = new system.web.ui.htmltextwriter (tw); datagrid.rendercontrol(hw); string filepath = page.server.mappath("..")+"\\files\\" +filename; system.io.streamwriter sw = system.io.file.createtext(filepath); sw.write(tw.tostring()); sw.close(); downfile(httpresponse,filename,filepath); httpresponse.end(); } private static bool downfile(system.web.httpresponse response,string filename,string fullpath) { try { response.contenttype = "application/octet-stream"; response.appendheader("content-disposition","attachment;filename=" + httputility.urlencode(filename,system.text.encoding.utf8) + ";charset=gb2312"); system.io.filestream fs= system.io.file.openread(fullpath); long flen=fs.length; int size=102400;//每100k同时下载数据 byte[] readdata = new byte[size];//指定缓冲区的大小 if(size>flen)size=convert.toint32(flen); long fpos=0; bool isend=false; while (!isend) { if((fpos+size)>flen) { size=convert.toint32(flen-fpos); readdata = new byte[size]; isend=true; } fs.read(readdata, 0, size);//读入一个压缩块 response.binarywrite(readdata); fpos+=size; } fs.close(); system.io.file.delete(fullpath); return true; } catch { return false; } } /// <summary> /// 将指定excel文件中的数据转换成datatable对象,供应用程序进一步处理 /// </summary> /// <param name="filepath"></param> /// <returns></returns> public static system.data.datatable import(string filepath) { system.data.datatable rs = new system.data.datatable(); bool canopen=false; oledbconnection conn = new oledbconnection("provider=microsoft.jet.oledb.4.0;"+ "data source=" + filepath + ";" + "extended properties=\"excel 8.0;\""); try//尝试数据连接是否可用 { conn.open(); conn.close(); canopen=true; } catch{} if(canopen) { try//如果数据连接可以打开则尝试读入数据 { oledbcommand myoledbcommand = new oledbcommand("select * from [sheet1$]",conn); oledbdataadapter mydata = new oledbdataadapter(myoledbcommand); mydata.fill(rs); conn.close(); } catch//如果数据连接可以打开但是读入数据失败,则从文件中提取出工作表的名称,再读入数据 { string sheetname=getsheetname(filepath); if(sheetname.length>0) { oledbcommand myoledbcommand = new oledbcommand("select * from ["+sheetname+"$]",conn); oledbdataadapter mydata = new oledbdataadapter(myoledbcommand); mydata.fill(rs); conn.close(); } } } else { system.io.streamreader tmpstream=file.opentext(filepath); string tmpstr=tmpstream.readtoend(); tmpstream.close(); rs=getdatatablefromstring(tmpstr); tmpstr=""; } return rs; } /// <summary> /// 将指定html字符串的数据转换成datatable对象 --根据“<tr><td>”等特殊字符进行处理 /// </summary> /// <param name="tmphtml">html字符串</param> /// <returns></returns> private static datatable getdatatablefromstring(string tmphtml) { string tmpstr=tmphtml; datatable tb=new datatable(); //先处理一下这个字符串,删除第一个<tr>之前合最后一个</tr>之后的部分 int index=tmpstr.indexof("<tr"); if(index>-1) tmpstr=tmpstr.substring(index); else return tb; index=tmpstr.lastindexof("</tr>"); if(index>-1) tmpstr=tmpstr.substring(0,index+5); else return tb; bool existssparator=false; char separator=convert.tochar("^"); //如果原字符串中包含分隔符“^”则先把它替换掉 if(tmpstr.indexof(separator.tostring())>-1) { existssparator=true; tmpstr=tmpstr.replace("^","^$&^"); } //先根据“</tr>”分拆 string[] tmprow=tmpstr.replace("</tr>","^").split(separator); for(int i=0;i<tmprow.length-1;i++) { datarow newrow=tb.newrow(); string tmpstri=tmprow[i]; if(tmpstri.indexof("<tr")>-1) { tmpstri=tmpstri.substring(tmpstri.indexof("<tr")); if(tmpstri.indexof("display:none")<0||tmpstri.indexof("display:none")>tmpstri.indexof(">")) { tmpstri=tmpstri.replace("</td>","^"); string[] tmpfield=tmpstri.split(separator); for(int j=0;j<tmpfield.length-1;j++) { tmpfield[j]=removestring(tmpfield[j],"<font>"); index=tmpfield[j].lastindexof(">")+1; if(index>0) { string field=tmpfield[j].substring(index,tmpfield[j].length-index); if(existssparator) field=field.replace("^$&^","^"); if(i==0) { string tmpfieldname=field; int sn=1; while(tb.columns.contains(tmpfieldname)) { tmpfieldname=field+sn.tostring(); sn+=1; } tb.columns.add(tmpfieldname); } else { newrow[j]=field; } }//end of if(index>0) } if(i>0) tb.rows.add(newrow); } } } tb.acceptchanges(); return tb; } /// <summary> /// 从指定html字符串中剔除指定的对象 /// </summary> /// <param name="tmphtml">html字符串</param> /// <param name="remove">需要剔除的对象--例如输入"<font>"则剔除"<font ???????>"和"</font>>"</param> /// <returns></returns> public static string removestring(string tmphtml,string remove) { tmphtml=tmphtml.replace(remove.replace("<","</"),""); tmphtml=removestringhead(tmphtml,remove); return tmphtml; } /// <summary> /// 只供方法removestring()使用 /// </summary> /// <returns></returns> private static string removestringhead(string tmphtml,string remove) { //为了方便注释,假设输入参数remove="<font>" if(remove.length<1) return tmphtml;//参数remove为空:不处理返回 if((remove.substring(0,1)!="<")||(remove.substring(remove.length-1)!=">")) return tmphtml;//参数remove不是<?????>:不处理返回 int indexs=tmphtml.indexof(remove.replace(">",""));//查找“<font”的位置 int indexe=-1; if(indexs>-1) { string tmpright=tmphtml.substring(indexs,tmphtml.length-indexs); indexe=tmpright.indexof(">"); if(indexe>-1) tmphtml=tmphtml.substring(0,indexs)+tmphtml.substring(indexs+indexe+1); if(tmphtml.indexof(remove.replace(">",""))>-1) tmphtml=removestringhead(tmphtml,remove); } return tmphtml; } /// <summary> /// 将指定excel文件中读取第一张工作表的名称 /// </summary> /// <param name="filepath"></param> /// <returns></returns> private static string getsheetname(string filepath) { string sheetname=""; system.io.filestream tmpstream=file.openread(filepath); byte[] filebyte=new byte[tmpstream.length]; tmpstream.read(filebyte,0,filebyte.length); tmpstream.close(); byte[] tmpbyte=new byte[]{convert.tobyte(11),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0), convert.tobyte(11),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0),convert.tobyte(0), convert.tobyte(30),convert.tobyte(16),convert.tobyte(0),convert.tobyte(0)}; int index=getsheetindex(filebyte,tmpbyte); if(index>-1) { index+=16+12; system.collections.arraylist sheetnamelist=new system.collections.arraylist(); for(int i=index;i<filebyte.length-1;i++) { byte temp=filebyte[i]; if(temp!=convert.tobyte(0)) sheetnamelist.add(temp); else break; } byte[] sheetnamebyte=new byte[sheetnamelist.count]; for(int i=0;i<sheetnamelist.count;i++) sheetnamebyte[i]=convert.tobyte(sheetnamelist[i]); sheetname=system.text.encoding.default.getstring(sheetnamebyte); } return sheetname; } /// <summary> /// 只供方法getsheetname()使用 /// </summary> /// <returns></returns> private static int getsheetindex(byte[] findtarget,byte[] finditem) { int index=-1; int finditemlength=finditem.length; if(finditemlength<1) return -1; int findtargetlength=findtarget.length; if((findtargetlength-1)<finditemlength) return -1; for(int i=findtargetlength-finditemlength-1;i>-1;i--) { system.collections.arraylist tmplist=new system.collections.arraylist(); int find=0; for(int j=0;j<finditemlength;j++) { if(findtarget[i+j]==finditem[j]) find+=1; } if(find==finditemlength) { index=i; break; } } return index; } 。
最后此篇关于asp.net与excel互操作实现代码的文章就讲到这里了,如果你想了解更多关于asp.net与excel互操作实现代码的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我试图找出如何访问 ClojureScript 中的 Javascript 对象属性。如果我事先知道属性(property)的名称,那就很容易了。获取foo.bar我只是做 (.-bar foo) I
我是 .NET 的新手。我想制作一个控制台应用程序,将 .pptx 文件转换为 .wmv。我已经使用 powerpoint interop 做到了这一点。但我有一些问题。首先,如果我构建应用程序并将其
我计划将我的许可系统的核心转移到 C++,但我仍然更喜欢使用 .NET 前端进行设计。无论如何,我刚刚读完互操作功能,并决定对其进行测试。问题是,它对我来说只是花花公子,但对任何其他用户都不起作用。我
系统管理员正在编写一些常用的管理 Power Shell 脚本。主要用于 AD 管理(更新交易所详细信息、在安全组中移动人员等) 我想使用 C# 中的这些脚本(我打算将其编写为库,供网站使用)。 我看
我想在我的应用程序中使用 COM 对象。 如何确保对象已在机器中注册? 我找到的唯一解决方案(也是 on SO)是在初始化周围使用 try-catch block : try { Foo.Ba
这个问题在这里已经有了答案: How to call Java code from C#? (4 个答案) 关闭 10 个月前。 您能给我一些关于使 C# 代码和 Java 代码互操作的建议吗?让我
我正在使用 Microsoft.Office.Interop.Excel 从 C# 创建一个 Excel 工作表,但我无法按照用户想要的方式获取页脚。 1) 如何将页脚文本加粗? 2)如何将页码放在页
我正在使用 F# 和 Excel Interop 将数据输出到 Excel 电子表格。我的第一种方法是单独设置每个单元格: worksheet.Range(range1).Value2 <- "=su
与来自 Silverlight 的 COM 控件进行交互的选项有哪些? 在我的特定项目中,我有一个旧的 ActiveX 身份验证控件,我想在我的 Silverlight 应用程序中利用它。没有太多无聊
我需要针对以下场景的一些建议: 我的 Uni 组有一个巨大的 SVN 存储库。我实际上对整个项目的子目录感兴趣(例如/trunk/projects/my_project)- 不知道它是否真的与 SVN
我有一个 .NET 程序集,它是通过 COM Interop 从 Delphi 主机调用的。据我所知,.NET 代码中任何未处理的异常都将由 .net com 互操作框架处理,并且相应的 HRESUL
我有一个程序可以在单击按钮时创建两个 pdf 文件。它在 WinForms 中使用 Microsoft Office 互操作,文件创建过程如下; 用户在程序中工作 点击按钮 程序根据一个带有书签的模板
我有一个第三方 DLL 用 Delphi“a.dll”(无源代码)编写。 这个 DLL 有一个带有这个签名的方法。 function GetAny(pFileName: String): String
想知道是否有人成功使用 JDEdwards XMLInterop 功能。我已经使用它有一段时间了(使用一个简单的 PInvoke,稍后将发布代码)。我正在寻找是否有更好和/或更强大的方法。 谢谢。 最
我正在尝试让 javafx2 与 Clojure 一起使用 - 在实现像 DoubleBinding 这样的抽象类时,我不确定 Clojure 中 super.bind(moo) 的等价物是什么。我正
有人有使用 Firebird 与 .NET 框架互操作的经验吗?如果有,进展如何? 最佳答案 我在商业桌面应用程序中使用了 firebird。 它的性能很好,直到您处理返回大型结果集的查询。在这些情况
我正在 Excel 工作表中复制并插入行,如下所示: while (rowsToAdd > 0) { // copy the existing row insert
我无法确保正确销毁托管窗口。 我有一个 HwndHost 派生类,正在 TabControl 中显示(尽管这可能不相关)。我试图在选项卡关闭时销毁托管内容(而不是在包含的窗口关闭时)。 我目前拥有 m
我有两个 python 类,它们都可以使用 COM 互操作机制独立于 VBA 编写脚本。但我希望一个能够以父子模式或工厂模式控制另一个的创建。 我已经尝试过,但无法开始工作,我已将其提炼为下面的 MC
我们在我们编写的 C# dll(程序集 A)中使用 Microsoft 提供的 COM DLL (dsofile.dll)。为了避免必须注册 COM dll,我已将对 dsofile.dll 的引用的
我是一名优秀的程序员,十分优秀!