C#.net编程创建Access文件和Excel文件的方法详解
本文实例讲述了c#.net编程创建access文件和excel文件的方法。分享给大家供大家参考,具体如下:
一些系统可能需求把数据导出到access或者excel文件格式,以方便的传递数据、打印等。
excel 文件或者 access这两种需要导出的文件可能并不是事先就存在的,这就需要我们自己编程生成他们,下面整理一下生成这两个文件的一些方法,只罗列最常用的。并不全。
一、首先生成excel文件。
方案一、如果用excel保存的只是二维数据,也就是把他当数据库的来用。
最简单,你不用引用任何额外组件,只需要用 oledb 就可以完成创建excel文件。 范例代码如下。
using system.data.oledb; public static void createexcelfile2() { string oledbconnstr = "provider=microsoft.jet.oledb.4.0;data source=c://aa2.xls;"; oledbconnstr += " extended properties=excel 8.0;"; string strcreatetablesql = @" create table "; strcreatetablesql += @" 测试表 "; strcreatetablesql += @" ( "; strcreatetablesql += @" id integer, "; strcreatetablesql += @" userid integer, "; strcreatetablesql += @" userip varchar , "; strcreatetablesql += @" posttime datetime , "; strcreatetablesql += @" fromparm varchar "; strcreatetablesql += @" ) "; oledbconnection oconn = new oledbconnection(); oconn.connectionstring = oledbconnstr; oledbcommand ocreatecomm = new oledbcommand(); ocreatecomm.connection = oconn; ocreatecomm.commandtext = strcreatetablesql; oconn.open(); ocreatecomm.executenonquery(); oconn.close(); } using system.data.oledb; public static void createexcelfile2() { string oledbconnstr = "provider=microsoft.jet.oledb.4.0;data source=c://aa2.xls;"; oledbconnstr += " extended properties=excel 8.0;"; string strcreatetablesql = @" create table "; strcreatetablesql += @" 测试表 "; strcreatetablesql += @" ( "; strcreatetablesql += @" id integer, "; strcreatetablesql += @" userid integer, "; strcreatetablesql += @" userip varchar , "; strcreatetablesql += @" posttime datetime , "; strcreatetablesql += @" fromparm varchar "; strcreatetablesql += @" ) "; oledbconnection oconn = new oledbconnection(); oconn.connectionstring = oledbconnstr; oledbcommand ocreatecomm = new oledbcommand(); ocreatecomm.connection = oconn; ocreatecomm.commandtext = strcreatetablesql; oconn.open(); ocreatecomm.executenonquery(); oconn.close(); }
在你执行创建表的同时,系统如果发现excel文件不存在,就自动完成了excel文件的创建。这点如果没接触过的人,可能会不知道的。
至于对其中的增加、修改操作, 跟普通数据库没啥两样,就不描述了。
方案二、直接生成一个使用间隔符号隔开每一项数据的纯文本文件,但是文件的后缀是 xls 。
注意:这时候,如果你直接用excel打开这样的文件,没问题,一切正常,但是如果你用ado.net 读取这个文件的时候,你的链接引擎不应该是excel,而是文本文件(microsoft text driver)。也就是链接字符串不应该是
而应该是下面的方式:
oledb的方式连接字符串:
odbc的方式读txt字符串写法:
driver={microsoft text driver (*.txt; *.csv)}; dbq=c://11.txt; extensions=asc,csv,tab,txt;
方案三、你要创建的excel文件,有一些excel自己的特色需要创建,这就需要使用 com 了,即:microsoft excel object library了
请添加 microsoft excel 11.0 object library 对它的引用,根据你装的office的版本,这个组件库的版本也不一样。
范例代码:
public static void createexcelfile() { string filename = "c://aa.xls"; missing miss = missing.value; excel.application m_objexcel = new excel.application(); m_objexcel.visible = false; excel.workbooks m_objbooks = (excel.workbooks)m_objexcel.workbooks; excel.workbook m_objbook = (excel.workbook)(m_objbooks.add(miss)); m_objbook.saveas(filename, miss, miss, miss, miss, miss, excel.xlsaveasaccessmode.xlnochange, miss, miss,miss, miss, miss); m_objbook.close(false, miss, miss); m_objexcel.quit(); }
我这里只是简单的创建了excel文件,没有更多的操作excel,如果想深入学习的话可以参考本站的相关文章。
二、生成access 数据库
access 毕竟是一个数据库,所以excel上述第一种方法,无法适用。
创建access 数据库文件可以使用 adox,
adox与oledb的区别:adox是 data api 只是一个接口, oledb 是数据提供者,api 去调用 数据提供者。
范例代码:
使用前,请添加引用 microsoft ado ext. 2.x for ddl and security 根据你的操作系统,可能这里的版本也不一样。
using adox; using system.io; public static void createaccessfile(string filename) { if(!file.exists(filename)) { adox.catalogclass cat = new adox.catalogclass(); cat.create("provider=microsoft.jet.oledb.4.0;data source=" + filename +";"); cat = null; } }
上述代码只是生成了access数据库,适用adox你也可以操作数据库,增加表等等操作。
using system; using adox; namespace webportal { /// <summary> /// createaccessdb 的摘要说明。 /// 对于不同版本的ado,需要添加不同的引用 /// 请添加引用microsoft ado ext. 2.7 for ddl and security /// 请添加引用microsoft ado ext. 2.8 for ddl and security /// </summary> public class createaccessdb : system.web.ui.page { private void page_load(object sender, system.eventargs e) { //为了方便测试,数据库名字采用比较随机的名字,以防止添加不成功时还需要重新启动iis来删除数据库。 string dbname = "d://newmdb"+datetime.now.millisecond.tostring()+".mdb"; adox.catalogclass cat = new adox.catalogclass(); cat.create("provider=microsoft.jet.oledb.4.0;data source=" + dbname +";"); response.write("数据库:" + dbname + "已经创建成功!"); adox.tableclass tbl = new adox.tableclass(); tbl.parentcatalog = cat; tbl.name="mytable"; //增加一个自动增长的字段 adox.columnclass col = new adox.columnclass(); col.parentcatalog = cat; col.type=adox.datatypeenum.adinteger; // 必须先设置字段类型 col.name = "id"; col.properties["jet oledb:allow zero length"].value= false; col.properties["autoincrement"].value= true; tbl.columns.append (col,adox.datatypeenum.adinteger,0); //增加一个文本字段 adox.columnclass col2 = new adox.columnclass(); col2.parentcatalog = cat; col2.name = "description"; col2.properties["jet oledb:allow zero length"].value= false; tbl.columns.append (col2,adox.datatypeenum.advarchar,25); //设置主键 tbl.keys.append("primarykey",adox.keytypeenum.adkeyprimary,"id","",""); cat.tables.append (tbl); response.write("<br>数据库表:" + tbl.name + "已经创建成功!"); tbl=null; cat = null; } #region web 窗体设计器生成的代码 override protected void oninit(eventargs e) { // // codegen: 该调用是 asp.net web 窗体设计器所必需的。 // initializecomponent(); base.oninit(e); } /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void initializecomponent() { this.load += new system.eventhandler(this.page_load); } #endregion } }
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#中xml文件操作技巧汇总》、《c#常见控件用法教程》、《winform控件用法总结》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结》
希望本文所述对大家c#程序设计有所帮助。