VB6 到 Xls 没有 Excel

Posted

技术标签:

【中文标题】VB6 到 Xls 没有 Excel【英文标题】:VB6 To Xls without Excel 【发布时间】:2017-02-02 03:47:35 【问题描述】:

我必须将数据从 VB6 应用程序中不同表单的多个 Flexgrid 传输到未安装 excel 的计算机中的 .xls 文件。这些 PC 中安装了 Openoffice、LibreOffice 等。

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

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

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

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

【问题讨论】:

尝试使用数值数据类型,例如 dbInteger 或 dbLong?见msdn.microsoft.com/en-us/library/office/ff194420.aspx。 使用数字数据类型无济于事,因为该过程提供了一个网格作为参数,它只是将网格的数据发送到 Excel。并且在从网格标题创建 tabledef 中的字段时,它不会知道哪个是数字字段,哪个不是。 能否做到这一点取决于几件事。问题是 Jet Excel IISAM 必须将工作表或范围的每一列视为单一数据类型。文本通常是字符串,数字通常是双精度等。如果现有工作表/范围中的类型是混合的,事情可能会变得很冒险。根据第一个 MaxScanRows 中的内容(默认为 8),一列可能以 String 或 Double 结尾。 【参考方案1】:

您可以使用 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

【讨论】:

【参考方案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链接了解更多信息。

【讨论】:

问题没有excel。 mmm @Noodles,感谢您的反对... Excel 不是必需的,只有库。如果安装了应用程序,所有引用都指向与应用程序一起安装的库!!,不需要 excel 应用程序。如果您正确阅读 OP 的帖子,您会注意到他提到数据已发送到 .xls 文件,即上次我检查了一个 excel 文档。 我的意思是,OP 在第一句话中很清楚地指出 Excel 没有安装在那里,所以...

以上是关于VB6 到 Xls 没有 Excel的主要内容,如果未能解决你的问题,请参考以下文章

Python中,添加写入数据到已经存在的Excel的xls文件,即打开excel文件,写入新数据

VBA 将 Excel 文件从 Access 保存为 .xls

为啥plsq导入Excel没有xlsx格式

csv格式转换到excel(将大容量的csv文件转为xls)

将 SQL Server 表导出到 Microsoft Excel xlsx 文件

vb6.0改Excel的工作表名