2016-09-24 82 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