我通过VB将SQL Server 2000的某张表的记录导出到一个已经建好的Excel 2000模板里去,第一次导出正常;但再一次导出的时候结果不是我希望的,我希望第二次导出的数据恢会覆盖原来的,而不是在前面再添加一次。我用的添加数据的方法如下:
Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Cells(11, 2));此外,我发现如果是循环取数据添加的话就不会有不能覆盖的现象,方法如下:
ReDim rsTable(lngRowCount, lngColCount)
For i = 1 To lngRowCount
For j = 0 To lngColCount - 1
rsTable(i, j + 1) = RS.Fields(j)
'添加查询语句,导入EXCEL数据
xlSheet.Cells(i + 10, j + 2) = rsTable(i, j + 1)
Next
RS.MoveNext
Next但是第二种方法时间明显增长,700条记录用一只需要2秒钟,用二则要37秒。所以想请问各位有没有好办法解决这个问题。谢谢!!
Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Cells(11, 2));此外,我发现如果是循环取数据添加的话就不会有不能覆盖的现象,方法如下:
ReDim rsTable(lngRowCount, lngColCount)
For i = 1 To lngRowCount
For j = 0 To lngColCount - 1
rsTable(i, j + 1) = RS.Fields(j)
'添加查询语句,导入EXCEL数据
xlSheet.Cells(i + 10, j + 2) = rsTable(i, j + 1)
Next
RS.MoveNext
Next但是第二种方法时间明显增长,700条记录用一只需要2秒钟,用二则要37秒。所以想请问各位有没有好办法解决这个问题。谢谢!!
Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Cells(11, 2));
xlQuery.RefreshStyle = xlInsertDeleteCells
请问,“添加前清除掉旧的记录”,指的是用VBA的方法将旧记录清除掉吗?如何做呢?
在添加数据之前清除所有单元格数据 xlApp.Sheets("Sheet1").Select
xlApp.Cells.Select
xlApp.Selection.ClearContents
用了你的方法,它就会把模板了所有数据都清除掉了,包括我想清除的和不想清除的,然后参考了你的方法,用了下面的语句:xlSheet.Range("B11:L16").ClearContents,这样的话就定死了只删某一区域的内容了。
此外,有什么办法可以让我定好的模板可以根据数据量的多少在那个范围内自动增加列数啊。
就是,我的模板定好了Range("B11:L16")范围内是添加数据的,但数据量若超过了这一范围,它就不会往这范围里面加了。
需要看看我的程序和Excel模板吗??
在导出之前可以知道记录集的列数和行数的,按照得到的函数和列数
可以控制导出的范围
行数 nRow=rs.recordcount
列数 nCol=rs.fields.count利用行数和列数控制Range的范围试试
Private Sub Command1_Click()
Dim xlApp As New Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet
xlApp.Caption = "test"
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)'定义并得到行列
Dim nRow As Integer
Dim nCol As Integer
nRow = 20
nCol = 15'构造范围字符串
Dim str1 As String
str1 = "B11:" & Chr(Asc("B") + nCol) & (11 + nRow)'选中这个区域
xlApp.Range(str1).Select'清除并导入数据
xlApp.Visible = True
End Sub
那么我希望可以根据数据条数通过程序动态的调整区域的范围,譬如我知道了数据有10条,而模板定的区域不够(Range("B11:L16")),就通过程序动态的加长区域的范围,可以实现吗??如果可以,请问如何做?
因为,假如数据量很大:1000条,那我定的模板就好痛苦了
你可以不覆盖你的模板,把他存到别的位置呀
Public Sub PrintReport(ReportName As String, ReportID As Integer, RowsCnt As Integer, RepDate As String)
Dim oExcel As New excel.Application
Dim oBook As excel.Workbook
Dim oSheet As excel.Worksheet
Dim NewXLS As StringSet oBook = oExcel.Workbooks.Open(App.Path & "\Report\Template\" & ReportName & ".XLS")
Set oSheet = oBook.Sheets(1)FillData ReportID, oSheet, RowsCnt, RepDateNewXLS = App.Path & "\Report\" & ReportName & RepDate & ".XLS"
On Error Resume Next
If oTools.File(NewXLS) Then Kill NewXLS
oBook.Saved = True
oBook.SaveAs NewXLSoExcel.Visible = TrueSet oSheet = Nothing
Set oBook = Nothing
Set oExcel = Nothing
End Sub
我参照你上面的给定区域范围的那种做法作了,这样的话如果记录条数不超过模板定义的区域范围就可以覆盖,超过的话它就不往模板里加了。不知道是不是某些属性没有设置。
ghscsdn(宏)
现在是发觉记录条数超过模板定义的区域范围它就不往模板里加了。
非常痛苦啊,请大家帮忙解决呀!!!模板中添加数据的范围是Range(B11:L16)(我以为它会自动增长的)
我的部分程序: Cn = "DRIVER={SQL Server};SERVER=192.168.200.25;DATABASE=pubs;UID=cx;PWD=cx;OPTION=3"
With Rs_Data
If .State = adStateOpen Then
.Close
End If
.ActiveConnection = Cn
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockReadOnly
.Source = strOpen
.Open
End With
With Rs_Data
If .RecordCount < 1 Then
MsgBox ("没有记录!")
Exit Function
End If
'记录总数
lngRowcount = .RecordCount
'字段总数
lngColcount = .Fields.Count
End With
Set xlApp = CreateObject("Excel.Application")
Set xlBook = Nothing
Set xlSheet = Nothing
Set xlBook = xlApp.Workbooks.Open("F:\Project_DOC\B-S\Example\一次加进模板\劳保办结算统计表.xls")
Set xlSheet = xlBook.Worksheets("sheet1")
xlApp.Visible = True
lngTemp = 11 + lngRowcount
strTemp = "B11:L" & CStr(lngTemp)
xlSheet.Range(strTemp).ClearContents
xlApp.Range(strTemp).Select
xlApp.Range(strTemp).Activate
'添加查询语句,导入EXCEL数据
Set xlQuery = xlSheet.QueryTables.Add(Rs_Data, xlSheet.Cells(11, 2))
With xlQuery
'.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.PreserveColumnInfo = True
End With
xlQuery.FieldNames = False '显示字段名
xlQuery.Refresh ExclFileName = strAppPath & sFileName & ".xls" xlApp.Application.Visible = True '"交还控制给Excel
xlApp.WindowState = xlMaximized
xlBook.Save
xlApp.Quit
Set xlApp = Nothing
Set xlBook = Nothing
Set xlSheet = Nothing