Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用vbscript将数据库中的数据提取到不同的excel工作表?_Excel_Vbscript - Fatal编程技术网

如何使用vbscript将数据库中的数据提取到不同的excel工作表?

如何使用vbscript将数据库中的数据提取到不同的excel工作表?,excel,vbscript,Excel,Vbscript,我想使用vbscript将sql server中的4个表数据提取到不同的excel工作表中,现在我只能将一个表提取到一个工作表中,我不知道如何将另一个表提取到另一个工作表中。上面是我的代码,它是第一张工作表,但第二张工作表在运行bat文件时是空白的。谢谢你的帮助 RecordsetSqlServer.Open SQLStatement, ConnectionSqlServer SQLStatement = "SELECT col1, col2,col3, col4, col5, col6 FRO

我想使用vbscript将sql server中的4个表数据提取到不同的excel工作表中,现在我只能将一个表提取到一个工作表中,我不知道如何将另一个表提取到另一个工作表中。上面是我的代码,它是第一张工作表,但第二张工作表在运行bat文件时是空白的。谢谢你的帮助

RecordsetSqlServer.Open SQLStatement, ConnectionSqlServer
SQLStatement = "SELECT col1, col2,col3, col4, col5, col6 FROM [table1] table1"
Set objSheet = objWorkbook.WorkSheets("sheet1")
With objSheet

Do while NOT RecordsetSqlServer.Eof 

' objSheet.Cells(row,1).Value = 1
objSheet.Cells(row,2).Value = CStr(RecordsetSqlServer.Fields("col1").Value)
objSheet.Cells(row,3).Value = CStr(RecordsetSqlServer.Fields("col2").Value)
objSheet.Cells(row,4).Value = CStr(RecordsetSqlServer.Fields("col3").Value)
objSheet.Cells(row,5).Value = CStr(RecordsetSqlServer.Fields("col4").Value)
objSheet.Cells(row,6).Value = CStr(RecordsetSqlServer.Fields("col5").Value)
objSheet.Cells(row,7).Value = CStr(RecordsetSqlServer.Fields("col5").Value) * CStr(RecordsetSqlServer.Fields("col6").Value)
row = row + 1

RecordsetSqlServer.MoveNext

Loop

End with

这里有两组代码供您查看。(注意:未调试或测试)

A.捷径:

SQLStatement = "SELECT col1, col2,col3, col4, col5, col6 FROM [table1] table1"
' Note I moved your code around so that the sql statement 
' is defined before we open the recordset
RecordsetSqlServer.Open SQLStatement, ConnectionSqlServer
objWorkbook.WorkSheets("sheet1").Range("A1").CopyFromRecordset RecordsetSqlServer
RecordsetSqlServer.Close

SQLStatement = "SELECT col1, col2,col3, col4, col5, col6 FROM [table2] table2"
RecordsetSqlServer.Open SQLStatement, ConnectionSqlServer
objWorkbook.WorkSheets("sheet2").Range("A1").CopyFromRecordset RecordsetSqlServer
B.你做这件事的方式的延伸-不推荐

SQLStatement = "SELECT col1, col2,col3, col4, col5, col6 FROM [table1] table1"
' Note I moved your code around so that the sql statement 
' is defined before we open the recordset
RecordsetSqlServer.Open SQLStatement, ConnectionSqlServer
Set objSheet = objWorkbook.WorkSheets("sheet1") 

' This line is not necessary. Remove it
' With objSheet

Do while NOT RecordsetSqlServer.Eof 

' objSheet.Cells(row,1).Value = 1
objSheet.Cells(row,2).Value = CStr(RecordsetSqlServer.Fields("col1").Value)
objSheet.Cells(row,3).Value = CStr(RecordsetSqlServer.Fields("col2").Value)
objSheet.Cells(row,4).Value = CStr(RecordsetSqlServer.Fields("col3").Value)
objSheet.Cells(row,5).Value = CStr(RecordsetSqlServer.Fields("col4").Value)
objSheet.Cells(row,6).Value = CStr(RecordsetSqlServer.Fields("col5").Value)
objSheet.Cells(row,7).Value = CStr(RecordsetSqlServer.Fields("col5").Value) * CStr(RecordsetSqlServer.Fields("col6").Value)
row = row + 1

RecordsetSqlServer.MoveNext

Loop

' This line is not necessary. Remove it    
' End with

' This is where your original code finished
' Now we close the recordset 
RecordsetSqlServer.Close
' and open it again aganst the next table
SQLStatement = "SELECT col1, col2,col3, col4, col5, col6 FROM [table2]"
RecordsetSqlServer.Open SQLStatement, ConnectionSqlServer
' Set a reference to the next sheet
Set objSheet = objWorkbook.WorkSheets("sheet2")

' Because we closed and reopened the recordset, 
' this line is now true (we aren't at the end)
Do while NOT RecordsetSqlServer.Eof 

' objSheet.Cells(row,1).Value = 1
objSheet.Cells(row,2).Value = CStr(RecordsetSqlServer.Fields("col1").Value)
objSheet.Cells(row,3).Value = CStr(RecordsetSqlServer.Fields("col2").Value)
objSheet.Cells(row,4).Value = CStr(RecordsetSqlServer.Fields("col3").Value)
objSheet.Cells(row,5).Value = CStr(RecordsetSqlServer.Fields("col4").Value)
objSheet.Cells(row,6).Value = CStr(RecordsetSqlServer.Fields("col5").Value)
objSheet.Cells(row,7).Value = CStr(RecordsetSqlServer.Fields("col5").Value) * CStr(RecordsetSqlServer.Fields("col6").Value)
row = row + 1

RecordsetSqlServer.MoveNext

Loop

' Close the recordset
RecordsetSqlServer.Close

因为
RecordsetSqlServer.Eof
为true。你只是想在第二张纸上复制第二份数据吗?什么决定了第二张表上的内容?嗨,尼克,我在sql server中有4个表,这4个表需要解压缩到一个excel文件中,其中包括4个不同的表。我已成功地将1个表提取到一张工作表中,但不知道如何将第2个表的数据提取到第2张工作表中。您是否可以编辑您的问题以包含此信息。您错过了初始化RecordsetSqlServer的代码。那是挑桌子的人。请注意,在现有代码中,没有在任何地方定义任何表名。如何知道哪张表在第2页上?您必须首先设置
RecordsetSqlServer
才能从该表中读取。这将把记录集设置回起始位置,循环将正常工作。这意味着,如果我想提取到第二张工作表,它需要2个RecordsetSqlServer来定义表名?不,我认为您可以重复使用同一个。在代码中的某个地方,您可以将
RecordsetSqlServer
设置为特定的表。在写入工作表之前,需要重用该代码以将其设置为正确的表。在这一点上,你需要编辑你的问题,提供所有信息和所有代码嗨,尼克,感谢你的帮助,但不幸的是,这是行不通的。因为我在前面的顶部定义了sqlstatement,然后我使用call函数将数字循环到我设置的正确列中。这样做不好吗?你有什么好的建议吗?很抱歉,因为我是vbs的初学者。我不懂。当您使用第一个代码时,是否会出现错误?具体问题是什么?