2016-09-24 5 views
1

Мне нужно передать данные из нескольких Flexgrids в разных формах в приложении VB6 в файлы .xls на компьютерах, на которых не установлено excel. На этих ПК установлены Openoffice, LibreOffice и т. Д.VB6 To Xls без Excel

Я разработал общую процедуру, которая принимает FlexGrid в качестве параметра и передает свои данные в xls. Эта процедура использует DAO. Поскольку различные столбцы в различных FlexGrids содержат различные типы данных, в процедуре я определяю поля как тип «dbText».

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

Передача из любой сетки в xls работает нормально. Но проблема заключается в том, что для каждой ячейки, содержащей данные, вставляются одинарные кавычки для указания ее данных типа Text.

Есть ли способ удалить или избежать этих котировок? Поскольку числовые данные должны использоваться для суммирования и т. Д., Эти цитаты должны быть освобождены.

+0

Попробуйте использовать тип числовых данных, например, dbInteger или dbLong? См. Https://msdn.microsoft.com/en-us/library/office/ff194420.aspx. – MarkL

+0

Использование числового типа данных не поможет, поскольку процедура предоставляется сеткой в ​​качестве параметра, и она просто посылает данные сетки, чтобы преуспеть. И, создавая поля в tabledef из заголовков сетки, он не будет знать, что такое числовое поле, а какое нет. –

+0

Можете ли вы это сделать, это зависит от нескольких вещей. Проблема в том, что JetISI IISAM должен обрабатывать каждый столбец Листа или Диапазон как один тип данных. Текст, как правило, String, числовой, как правило, Double и т. Д. Если типы в существующем листе/диапазоне смешаны, все может стать критичным. Столбец может заканчиваться как String или Double, в зависимости от того, что находится в первом MaxScanRows (по умолчанию 8). – Bob77

ответ

-2

Существует гораздо более быстрое решение для копирования данных из flexgrid (без кавычек), показанных на vbForums с некоторого времени назад. Преимущество этих методов заключается в том, что они работают довольно быстро, по сравнению с передачей/передачей ячейки данных по ячейкам

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

Вопрос не превзошел. –

+0

mmm @Noodles, спасибо за подавляющее голосование ... Excel не требуется, только библиотеки. Если приложение установлено, все ссылки сделаны в библиотеках, которые установлены с приложением !!, не требуется приложение Excel. Если вы правильно прочтете сообщение OP, вы заметите, что он упоминает, что данные отправляются в файл .xls, который был последним, когда я проверил документ Excel. –

+0

Я имею в виду, что OP совершенно ясно заявляет, что Excel не установлен прямо там, в первом предложении, поэтому ... – helrich

0

Вы можете сделать это с помощью двигателя Jet, ODBC или accdb. Если вы используете 64-разрядную систему, убедитесь, что вы запустили ее из 32-разрядной командной строки в windows \ syswow64 \ 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, чтобы создать первенствовать лист

cscript xxx.vbs test.xls 

 Смежные вопросы

  • Нет связанных вопросов^_^