单元接口部分引用 comobj 单元(uses )
procedure TForm1.Button1Click(Sender: TObject);
var excelx,excely : string;
begin
try
ExcelApp := CreateOleObject('Excel.Application');
WorkBook := ExcelApp.WorkBooks.Open(opendialog.FileName);//使用opendialog对话框指定
//excel档路径
ExcelApp.Visible := false;
ExcelRowCount := WorkBook.WorkSheets[1].UsedRange.Rows.Count;
for i := 1 to excelrowcount + 1 do
begin
excelx := excelapp.Cells[i,1].Value;
excely := excelapp.Cells[i,2].Value;
if ((excelapp.Cells[i,1].Value = '') and (ExcelApp.Cells[i,2].Value = '')) then
//指定excel档的第 i 行 ,第 1,2(看情况而定)行如果为空就退出,这样的设定,最好是你的档案力这两行//对应数据库中不能为空的数据
exit
else
with query1 do
begin
close;
sql.clear;
sql.add(insert into test(name,address) values(:name,:address));
parambyname('name').asstring := excelx;//excel档的第一列插入到test表的 name栏位;
parambyname('address').asstring := excely;//excel档的第二列插入到test表的 address 栏位;
execsql;
end;
end;
finally
WorkBook.Close;
ExcelApp.Quit;
ExcelApp := Unassigned;
WorkBook := Unassigned;
end;
end;
解析UsedRange属性 |
UsedRange属性的一些常见用法
(1) 返回工作表中已使用区域的行数或列数
语句Activesheet.UsedRange.Rows.count返回当前工作表中已使用单元格区域的行数。同样,语句Activesheet.UsedRange.Columns.count返回当前工作表中已使用单元格区域的列数。在上例中,您可以在调试窗口中输入下面语句,将返回相应的值。
?Activesheet.UsedRange.Rows.count
20
?Activesheet.UsedRange.Columns.count
4
一般写法为<在此输入引用对象>.UsedRange.Rows.Count和<在此输入引用对象>.UsedRange.Columns.Count。
(2) 返回工作表中已使用单元格区域的地址
语句Activesheet.UsedRange.Address 返回当前工作表已使用单元格区域的地址。在上例中,您可以在调试窗口中输入下面语句,将返回已使用单元格区域地址为$A$1:$D$20。
?Activesheet.UsedRange.Address
$A$1:$D$20
一般写法为<在此输入引用对象>.UsedRange.Address
(3) 设置工作表中已使用单元格区域对象,并进行引用或操作。如下代码所示:
Dim cellRange As Range,RowNum As Long,ColNum As Long
Set cellRange=Worksheets(“Sheet1”).UsedRange ‘设置已用单元格区域并赋值给变量
RowNum=cellRange.Rows.Count ‘已用单元格区域的行数
ColNum=cellRange.Columns.Count ‘已用单元格区域的列数
UsedRange属性示例
现在,我们举几个例子,进一步说明UsedRange属性的用法。
[示例一]下面的程序在活动工作表已使用单元格区域中,当该区域不包含任何公式时,清除该区域不能打印的字符。其中,ActiveSheet.UsedRange 代表当前工作表中已使用单元格区域组成的Range对象。(By Chip Pearson)
Sub CleanUp()
Dim TheCell As Range
For Each TheCell In ActiveSheet.UsedRange
With TheCell
If .HasFormula = False Then
.Value = Application.WorksheetFunction.Clean(.Value)
End If
End With
Next TheCell
End Sub
示例二]下面的程序将当前工作表中已用单元格区域或所选单元格中第一个字符删除,其中,ActiveSheet.UsedRange.Address代表当前工作表中已用单元格区域的地址。
Public Sub Delete_First_Character(Optional ByRef objRange As Range = Nothing)
Dim objCell As Range
On Error Resume Next
If (objRange Is Nothing) Then
Set objRange = Application.InputBox(Prompt:="请选择单元格区域", _
Title:="删除第一个字符", _
Type:=8, _
Default:=ActiveSheet.UsedRange.Address) '设置缺省选区为已用区域
End If
Err.Clear
Set objRange = objRange.SpecialCells(xlCellTypeConstants)
If (Err.Number <> 0&) Or (objRange Is Nothing) Then
MsgBox "在指定的单元格区域中没有符合要求的单元格.", _
vbExclamation Or vbOKOnly, _
ActiveWorkbook.Name
Exit Sub
End If
On Error GoTo Exit_Delete_First_Character
Application.ScreenUpdating = False
For Each objCell In objRange
objCell = Mid$(objCell, 2)
Next objCell
Exit_Delete_First_Character:
On Error Resume Next
Application.ScreenUpdating = True
End Sub
示例三]在本示例中,当您在工作表的E列中的单元格中输入“finish”后,点击右侧按钮,将会对此行用指定的背景色进行标识,如图3和图4。
500){this.resized=true;this.style.width=500;}" resized="true">
图3:在E8单元格中输入“finish”
500){this.resized=true;this.style.width=500;}" resized="true">
图4:点击按钮后的效果
当您删除单元格E6中的数据,如下图5所示。
500){this.resized=true;this.style.width=500;}" resized="true">
图5:删除单元格E6中的数据
500){this.resized=true;this.style.width=500;}" resized="true">
图6:点击按钮后的效果
本示例中按钮所附加的代码如下,其中,UsedRange.Rows.Count表示当前工作表中已使用区域的行数。
Private Sub CommandButton1_Click()
Dim r As Long
For r = UsedRange.Rows.Count To 1 Step -1
If Range("E" & r) = "finish" Then _
Range("A:G").Rows(r).Interior.ColorIndex = 10
Next r
For r = UsedRange.Rows.Count To 1 Step -1
If Range("E" & r) = "" Then _
Range("A:G").Rows(r).Interior.ColorIndex = 2
Next r
End Sub
[提示]您可以将此代码放置在工作表变化事件中,这样,当工作表变化时,符合条件的相应行会自动标记背景色。
[示例四]本示例演示了删除行操作,即在活动工作表已使用单元格区域中,若某单元格中包含有“AND”(如为ANDXXX或XXXANDXX或XXXAND等,不区分大小写),则删除该单元格所在行。ActiveSheet.UsedRange.Find(what)表示在当前工作表所有已使用单元格区域中查找含有变量what中的内容的单元格,程序代码如下:(by Patrick Molloy)
Sub Find_AND()
Dim rng As Range
Dim what As String
what = "AND"
Do
Set rng = ActiveSheet.UsedRange.Find(what)
If rng Is Nothing Then
Exit Do
Else
Rows(rng.Row).Delete
End If
Loop
End Sub
[提示]您可以更改程序中所查找的字符,从而实现您所想要的目的。
<!--
-->