2016-09-24 108 views
1

我必须将VB6应用程序中不同窗体中的几个Flexgrid的数据传输到没有安装Excel的计算机上的.xls文件。 Openoffice,LibreOffice等安装在这些PC中。VB6到Xls没有Excel

我开发了一个以FlexGrid作为参数并将其数据传输到xls的通用过程。此过程使用DAO。由于各种FlexGrids中的各种列包含各种数据类型,因此在该过程中,我将字段定义为类型“dbText”。

t.Fields.Append t.CreateField(pFlxGrd.TextMatrix(0, j), dbText) 

从任何网格转移到xls工作正常。但是,问题在于,对于包含数据的每个单元格,插入单引号以指示其文本类型的数据。

有什么方法可以删除或避免这些引号?由于数字数据将用于求和等,因此必须删除这些引号。

+0

使用数值数据类型,如dbInteger或dbLong尝试?请参阅https://msdn.microsoft.com/en-us/library/office/ff194420.aspx。 – MarkL

+0

使用数字数据类型将无济于事,因为过程提供了一个网格作为参数,它只是将网格的数据发送到excel。 当从网格标题创建tabledef中的字段时,它不会知道哪个是数字字段,哪些不是。 –

+0

你是否可以做到这一点取决于一些事情。问题是Jet Excel IISAM必须将Sheet或Range的每列作为单一数据类型处理。文本通常是字符串,数字通常是双精度等。如果现有图纸/范围中的类型混合在一起,事情会变得危险。根据第一个MaxScanRows中的内容(默认值为8),列可能以String或Double结尾。 – Bob77

回答

-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链接以获取更多信息。

+2

问题是没有excel。 – 2016-09-26 02:39:05

+0

mmm @Noodles,感谢您的反对... Excel不是必需的,只有图书馆。如果应用程序已安装,则所有引用都将与随应用程序一起安装的库一起进行,因此不需要使用Excel应用程序。如果你正确地阅读了OP的帖子,你会注意到他提到数据被发送到一个.xls文件,这是上次我检查了一个excel文件。 –

+0

我的意思是,OP很清楚地表明Excel没有安装在第一句中,所以...... – helrich

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