如何用winform向excel中插入数据,就好像把excel当作数据库是一样的,我只会BS的 CS不会写 求教

如何用winform向excel中插入数据,就好像把excel当作数据库是一样的,我只会BS的 CS不会写 求教,第1张

这里我用了Execl.dll的方式导出,不过这种方式用很大的弊端...貌似要根据office版本来确定引用的类...ps:我也不太明白

第一步引用命名空间

关于这个命名空间晚上的资料多大直接都写的是

using Excel

private void doExport(DataTable dt, string strSheetName)

{

Excel.Application excel = new Excel.Application() //Execl的 *** 作类

//读取保存目标的对象

Excel.Workbook bookDest = (Excel.WorkbookClass)excel.Workbooks.Add(Missing.Value)

Excel.Worksheet sheetDest = bookDest.Worksheets.Add(Missing.Value, Missing.Value, Missing.Value, Missing.Value) as Excel.Worksheet//给工作薄添加一个Sheet

sheetDest.Name = strSheetName//自己定义名字O(∩_∩)O哈哈~

int rowIndex = 1

int colIndex = 0

excel.Application.Workbooks.Add(true)//这句不写不知道会不会报错

foreach (DataColumn col in dt.Columns)

{

colIndex++

sheetDest.Cells[1, colIndex] = col.ColumnName//Execl中的第一列,把DataTable的列名先导进去

}

//导入数据行

foreach (DataRow row in dt.Rows)

{

rowIndex++

colIndex = 0

foreach (DataColumn col in dt.Columns)

{

colIndex++

sheetDest.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString()

}

}

bookDest.Saved = true

bookDest.SaveCopyAs("要保存的文件路径+文件名.xls")//方式一

excel.Quit()

excel = null

GC.Collect()//垃圾回收

}

这是过去曾参考应用过的方法摘一段给你应急:

一、首先处理好数据库连接字串

Excel2000-2003:

string

connStr

=

"Microsoft.Jet.Oledb.4.0Data

Source='c:\test.xls'Extended

Properties=\"Excel

8.0HDR=YesIMEX=1\""

Excel2007:

string

connStr

=

"Microsoft.Ace.OleDb.12.0Data

Source='c:\test.xlsx'Extended

Properties=\"Excel

12.0HDR=YesIMEX=1\""

其中:

HDR

(

Header

Row

)设置:

若指定值为Yes,代表

Excel

档中的工作表第一行是栏位名称

若指定值为

No,代表

Excel

档中的工作表第一行就是资料了,没有栏位名称

IMEX

(

IMport

EXport

mode

)设置

IMEX=0

时为"汇出模式",这个模式开启的

Excel

档案只能用来做"写入"用途。

IMEX=1

时为"汇入模式",这个模式开启的

Excel

档案只能用来做"读取"用途。

IMEX=2

时为"连结模式",这个模式开启的

Excel

档案可同时支援"读取"与"写入"用途。

二、进行表格数据的查询、插入和更新:

(假设Excel文件text.xls中存在Excel表单tree,有2列分别为id,name)

1、查询

String

sql

=

"select

id,

name

from

[tree$]"

String

sql

=

"select

id,

name

from

`tree$`

2、插入

String

sql

=

"insert

into

[tree$]

(id,name)

values(1,'testname')

3、更新

String

sql

=

"update

[tree$]

set

name='name2'

where

id=1

4、数据的删除

在OleDB的连接方式下,不可以使用delete

from

语句来删除某表中的某一条记录。确切的说,在此模式下,将无法删除表中的记录。即使用update语句将所有的字段写成null,打开excel文件后依然会发现保留了该空行,而且在使用oleDB连接进行查询时,依然会查询到这条空数据。

由于目前,C#和VB.net都不支持OLE技术(参见微软支持中心Info:304562),,所以只有使用WebBrowser控件来完成此功能。(以下方法参见微软支持中心Howto:304662)

1、右击工具箱,选择自定义工具箱,添加COM组件,选择“Microsoft Web 浏览器”(对应文件是\winnt\system32\shdocvw.dll),确定。在工具箱中将会出现文本为Explorer的WebBroser控件图标。

2、在Form1中添加WebBrowser控件。(对象名却省是axWebBrowser1)

3、假定要打开的excel文件是: c:\a.xls。

string strFileName = @"c:\a.xls"

Object refmissing = System.Reflection.Missing.Value

axWebBrowser1.Navigate(strFileName, ref refmissing , ref refmissing , ref refmissing , ref refmissing)

值得注意的是用WebBrowser控件不支持菜单合并,也就是说无法把Excel表的菜单带入到我们的程序中。这是相对于OLE实现方法的一大缺点。幸好提供了可以把工具栏添加进来的功能,通过工具栏可以进行许多Excel专有的 *** 作。

//下面这句可以将excel本身的工具调添加进来

axWebBrowser1.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,ref refmissing , ref refmissing)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11917612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存