我必须将VB6应用程序中不同表单的几个Flexgrids中的数据传输到未安装excel的计算机中的.xls文件。 Openoffice,LibreOffice等安装在这些PC中。
我开发了一个通用程序,它将FlexGrid作为参数并将其数据传输到xls。此过程使用DAO。由于各种FlexGrids中的各个列包含各种数据类型,因此在过程中我将字段定义为类型" dbText"。
t.Fields.Append t.CreateField(pFlxGrd.TextMatrix(0, j), dbText)
从任何网格转移到xls工作正常。但是,问题是,对于包含数据的每个单元格,插入单引号以指示其Text类型的数据。
有没有办法删除或避免这些引用?由于数字数据将用于求和等,因此必须删除这些引号。
答案 0 :(得分:0)
您可以使用Jet引擎,ODBC或accdb执行此操作。如果您使用的是64位系统,请确保从Windows \ syswow64 \ cmd中的32位cmd提示符运行它。我没有安装VB6所以这个解决方案只在vbscript中测试过,这非常相似。您只需将类型添加到dim语句中即可。
dim connExcel, connExcelStr, rsExcel, xlpath
' Get the parameter from the command line
xlpath = WScript.Arguments.Item(0)
' Create the connection
set connExcel = CreateObject("ADODB.Connection")
' Setup the connection string
' xlpath = "U:\JetExcel\data.xls"
connExcelStr = "Driver={Microsoft Excel Driver (*.xls)};"
connExcelStr = connExcelStr & "Dbq=" & xlpath & ";"
connExcelStr = connExcelStr & "FIRSTROWHASNAMES=1;"
connExcelStr = connExcelStr & "READONLY=FALSE;"
connExcelStr = connExcelStr & "CREATE_DB=""" & xlpath & """;"
' Create a workbook
WScript.echo connExcelStr
connExcel.Open connExcelStr
' Create a worksheet
sqlQuery = "create table [Sheet1] (ID Number, FirstName Text, LastName Text)"
WScript.echo sqlQuery
set rsExcel = connExcel.Execute(sqlQuery)
' Put data into the worksheet
sqlQuery = "insert into [Sheet1] (ID, FirstName, LastName) values"
sqlQuery = sqlQuery & "(1, 'Humpty', 'Dumpty')"
WScript.echo sqlQuery
set rsExcel = connExcel.Execute(sqlQuery)
' Close workbook
connExcel.Close
set connExcel = nothing
如果脚本名为xxx.vbs,则创建Excel工作表
cscript xxx.vbs test.xls
答案 1 :(得分:-2)
从一段时间后复制vbForums中显示的flexgrid(不带引号)的数据有一个更快的解决方案 - 这种方法的优势在于它们的工作速度非常快,与发送/携带数据单元相比细胞
Private Sub FlexToExcel()
Dim xlObject As Excel.Application
Dim xlWB As Excel.Workbook
Set xlObject = New Excel.Application
'This Adds a new woorkbook, you could open the workbook from file also
Set xlWB = xlObject.Workbooks.Add
Clipboard.Clear 'Clear the Clipboard
With MSFlexGrid1
'Select Full Contents (You could also select partial content)
.Col = 0 'From first column
.Row = 0 'From first Row (header)
.ColSel = .Cols - 1 'Select all columns
.RowSel = .Rows - 1 'Select all rows
Clipboard.SetText .Clip 'Send to Clipboard
End With
With xlObject.ActiveWorkbook.ActiveSheet
.Range("A1").Select 'Select Cell A1 (will paste from here, to different cells)
.Paste 'Paste clipboard contents
End With
' This makes Excel visible
xlObject.Visible = True
End Sub
有关详细信息,请参阅THIS链接。