如何用winform向excel中插入数据,就好像把excel当作数据库是一样的,我只会BS的 CS不会写 求教
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用winform向excel中插入数据,就好像把excel当作数据库是一样的,我只会BS的 CS不会写 求教相关的知识,希望对你有一定的参考价值。
实现数据的增删改查
参考技术A 这里我用了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();//垃圾回收
参考技术B 给您一个简单一点的方案,不过前提是本地数据库连接。
1、按数据库表的方式建立excel表,但是列名最好是英文的;
2、用odbc建立“Microsoft Excel Driver (*.xls)”的数据库连接;
3、用ado.net之类的链接控件链接你建好的odbc数据源;
4、按照常规的表操作方式进行数据操作就行了。
只是对excel的操作commit和rollback没用,直接delete、insert和update就行了。本回答被提问者采纳 参考技术C 会B/S还不会C/S???我就熟悉C/S,C/S模式下,一般是先调用excel的引用,然后就定义一些什么worksheet,workbook这类的变量
先找到对应的excel文件,打开文件----打开指定的工作表(可以根据工作表名字来指定)
用循环方式,对excel的每个单元格写入数据
最后保存修改后的excel表格,退出所有excel的连接, 参考技术D http://blog.csdn.net/cpcpc/article/details/7029446
你可以看看这个博客,希望对你有帮助,这是一个系列的。
如何用vb向excel中添加控件,并响应事件
在excel中插入控件的方法如下:
1、点击开发工具选项卡,点击插入按钮,在弹出的框中选择要插入的控件
2、点击控件之后,鼠标变成十字形。拖动鼠标绘制控件,绘制完成后,弹出指定宏对话框,为此控件的单击事件关联宏。如果已写好需要执行的宏,则在列表框中选择相应的宏点击确定即可。若未写好,可点击新建按钮
3、在弹出的Visual Basic编辑器中写好需要执行的代码,关闭编辑器,即可
参考技术A 熟悉VB的朋友对使用ActiveX控件一定不会陌生,众多控件极大地方便了编程,但
唯一的缺陷是不能动态加载控件,必须在设计时通过引用,将控件放置在窗体上。
VB6.0已能够解决该问题,只是帮助中没有明确说明,并且没有描述到一些关键功能,
由于以前的版本中可以动态创建进程外服务:如果对象是外部可创建的,可在 Set 语
句中用 New 关键字、CreateObject 或 GetObject 从部件外面将对象引用赋予变量。
如果对象是从属对象,则需使用高层对象的方法,在 Set 语句中指定一个对象引用:
Dim xlApp1 As Excel.Application
Set xlApp1 = New Excel.Application
或
Dim xlApp As Object '定义存放引用对象的变量。
Set xlApp = CreateObject("excel.application")
xlApp.Visible = True
---- 这些语法很容易造成误导,以为动态加载ActiveX控件也是此方法,可能有朋友也
象我一样利用CreateObject尝试了无数次,却无功而返,不知微软公司是出于何种考
虑,动态加载ActiveX控件是扩展控件集合的方式实现,通过实际摸索,终于就如何实
现动态ActiveX控件找出了一条切实可行的方法,下面以一个具体的实例来详细说明。
一、ActiveX控件
---- ActiveX 控件是 Visual Basic 工具箱的扩充部分。使用 ActiveX 控件的方法与
使用其它标准内装的控件,如 CheckBox 控件,完全一样。在程序中加入 ActiveX 控
件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。
---- ActiveX 部件通过客户端/服务器关系与应用程序— 及与部件相互之间— 交互作
用。客户端是使用部件功能的应用程序代码或部件。服务器是部件及其关联的对象。例
如,假设应用程序使用 ActiveX 控件来提供一个标准的雇员窗体,供公司的多种应用
程序使用。提供雇员窗体的 ActiveX 控件就是服务器,使用这个控件的应用程序就是
服务器的客户端。
二、加载方法
---- VB6.0中对Controls 集合进行了扩展,以前版本中Controls 集合在窗体上列举出
已加载的控件,这在迭代过程中是很有用的。Controls 集合标识一个叫做 Controls
的内在窗体级变量。如果忽略可选的 object 所在处的整数,则关键字 Controls 必须
包括在内。我们通常在窗口中使用如下代码:
Text1.Text="Hello, world"
其实也可以使用如下代码达到同一目的:
Controls(1).Text="Hello, world"
---- 在VB6.0中除了原来的Clear、Remove 方法外(很奇怪,为什么微软在VB5.0中只提
供这两种方法,而没有提供Add方法,因为没有Add,这两种方法也就没什么用处),增
加了Add方法,该方法就是用于动态加载控件的:
Controls.Add(progid as String, Name as String);
progid: ActiveX部件的ProgID,如:"VB.CheckBox";
Name:ActiveX部件加载后的名称,如: "MyCheckBox";
若要在窗体上添加一个名为MyButton的按钮,可以使用:
dim oControl as Object '窗体级变量
注意:这里声明为Object对象类型
Private Sub LoadControl()
Set oControl = Controls.Add
("VB.CommandButton", "MyButton")
oControl.Left = 10
oControl.Top = 10
oControl.Visible = True '使控件可见
End Sub
---- 这是VB6.0的标准语法,它在例程中也是如此演示的,不过该方法虽然现实了控件
的动态加载,按钮显示在窗体上,可以象普通按钮一样按下去,但加载的控件不能预先
设计响应事件代码,如:事件Sub MyButton_Click()将是非法的,当然,可以将要响应
的事件封装在控件内部。就编程的观点来看该方法没什么大的用处,开发ActiveX控件
的目的是为了资源共享,为了被其他开发人员利用,所以要提供必要的事件接口,显然
利用该方法不行,通过分析VBControls等相关对象,找出VBControlExtender对象与
EventInfo相结合能提供事件陷井捕捉,VBControlExtender对象对动态添加控件特别有
用,它提供了一套通用的属性、方法、事件给开发人员,它的一个突出特点是能编程设
计控件的事件,熟习类编程的朋友对带事件的对象声明一定不会陌生:
---- Dim WithEvents objElemt as CElemtVBControlExtender也不例外,声明的语法
一样,只不过它有个特殊的事件ObjectEvent(Info As EventInfo),它能捕捉到对象使
用RaiseEvent产生的所有事件,EventInfo数据结构映射了事件的名称、参数个数和参
数的值。VBControlExtender和 EventInfo相结合,采用Select Case 就可以预先将不
同类对象的事件放置一起,各自独立运作。将上面的代码改写一下就能提供Click事件
了:
---- Dim WithEvents oControl As VBControlExtender '带事件声明声明之后您就可
以在代码窗口的左上角的对象下拉框中发现该对象出现了,也就是说,该对象有了事件
或方法了,它的事件有DragDrop,DragOver ,LostFocus ,GotFocus ,ObjectEvent
和Validate,其中ObjectEvent是通用的事件捕捉。
Private Sub LoadControl()
Set oControl = Controls.Add
("VB. CommandButton", "MyButton")
oControl.Visible = True
End Sub
Private Sub oControl_ObjectEvent(Info As EventInfo)
Select Case Info.Name
Case "Click" 'Click事件
'您可以添加处理Click事件代码
MsgBox "您按了MyButton!"
Case Else ' 其他事件
' Handle unknown events here.
End Select
End Sub 参考技术B
Excel中的VB语言叫做VBA,在VBE中使用代码新建即可。
Excel版本参考:2010
演示:新建一个表名为test的工作表。
1、ALT+F11,进入VBE窗口。
2、右击工作表标签-插入-模块。
3、输入代码:
Sub test()
Worksheets.Add(after:=Sheets(Sheets.Count)).Name = "test"
End Sub
4、按下F5执行,查看工作表,新建的test表 已新建好。
参考技术C 使用VBA在工作表中添加ActiveX控件要使用VBA从控件工具箱(ActiveX控件)中添加控件,可以使用OLEObjects集合的Add方法。该方法包含有大量的参数,包括
ClassType、Top、Left、Width和Height等。其中,ClassType参数代表的一些常见的ActiveX
控件的名称如下:
Forms.Checkbox.1(复选框)
Forms.Combobox.1(组合框)
Forms.Optionbutton.1(选项按钮)
Forms.Textbox.1(文本框)
Forms.Listbox.1(列表框)
Forms.Commandbutton.1
(命令按钮)
下面举一个例子,提供一些思路,并供探讨。
如下图所示,要求在每项工作前面都添加复选
框,并且当用户选中复选框后,自动隐藏该复选框所在的行。
下面的代码用来添加复选框:
Sub RefreshList()
Dim oCheck As OLEObject
Dim rCell As Range, rRange As Range
Dim lLastRow As Long
‘
清除已经存在于工作表中的复选框
For Each oCheck In Sheet1.OLEObjects
oCheck.Delete
Next oCheck
lLastRow = Sheet1.Range("B" & Cells.Rows.Count).End(xlUp).Row
Set rRange = Sheet1.Range("B2:B" & lLastRow)
For Each rCell In rRange
rCell.RowHeight = 14
With Sheet1.OLEObjects.Add(ClassType:="Forms.Checkbox.1", _
Top:=rCell.Top, Left:=rCell.Offset(0, -1).Left, _
Height:=rCell.Height, Width:=rCell.Offset(0, -1).Width)
.Object.Caption = ""
.LinkedCell = rCell.Offset(0, -1).Address
.Object.Value = False
End With
Next rCell
End Sub
上述代码首先删除工作表中所有已存在的复选框,因为本示例已知道工作表中无其他控件,
所以直接删除,
如果无法判断是否有其他控件而只需删除复选框,
可以加上一个条件判断语
句:
If TypeName(oCheck.Object)="CheckBox" Then
这样,仅删除复选框。
然后,
在确定数据范围后,
在第一列添加复选框并设置了一些属性值以方便以后操作。
这里,
有一些通用的适合于其他控件的属性,也有一些专属于复选框的属性。
下面的代码用于隐藏复选框选中后的行:
Sub HideRows()
Dim rCell As Range, rRange As Range
Dim lLastRow As Long
lLastRow = Sheet1.Range("B" & Cells.Rows.Count).End(xlUp).Row
Set rRange = Sheet1.Range("B2:B" & lLastRow)
For Each rCell In rRange
If rCell.Offset(0, -1).Value Then
rCell.EntireRow.Hidden = True
End If
Next rCell
End Sub
上述代码遍历设定区域的每行并隐藏已复选的行
参考下上边的,看能帮到你不本回答被提问者和网友采纳
以上是关于如何用winform向excel中插入数据,就好像把excel当作数据库是一样的,我只会BS的 CS不会写 求教的主要内容,如果未能解决你的问题,请参考以下文章