Вопрос:
Как считать данные из определенной ячейки рабочей книги Excel, открытой как двоичный файл (формат BIFF)?
Public Function WriteValue(ValueType As ValueTypes, CellFontUsed As CellFont, Alignment As CellAlignment, HiddenLocked As CellHiddenLocked, lrow As Long, lcol As Long, value As Variant, Optional CellFormat As Long = 0) As Integer
On Error GoTo Write_Error
'the row and column values are written to the excel file as
'unsigned integers. Therefore, must convert the longs to integer.
If lrow > 32767 Then
Row% = CInt(lrow - 65536)
Else
Row% = CInt(lrow) - 1 'rows/cols in Excel binary file are zero based
End If
If lcol > 32767 Then
col% = CInt(lcol - 65536)
Else
col% = CInt(lcol) - 1 'rows/cols in Excel binary file are zero based
End If
Select Case ValueType
Case ValueTypes.xlsinteger
Dim INTEGER_RECORD As tInteger
With INTEGER_RECORD
.opcode = 2
.Length = 9
.Row = Row%
.col = col%
.rgbAttr1 = CByte(HiddenLocked)
.rgbAttr2 = CByte(CellFontUsed + CellFormat)
.rgbAttr3 = CByte(Alignment)
.intValue = CInt(value)
End With
Put #FileNumber, , INTEGER_RECORD
Case ValueTypes.xlsnumber
Dim NUMBER_RECORD As tNumber
With NUMBER_RECORD
.opcode = 3
.Length = 15
.Row = Row%
.col = col%
.rgbAttr1 = CByte(HiddenLocked)
.rgbAttr2 = CByte(CellFontUsed + CellFormat)
.rgbAttr3 = CByte(Alignment)
.NumberValue = CDbl(value)
End With
Put #FileNumber, , NUMBER_RECORD
Case ValueTypes.xlsText
Dim b As Byte
st$ = CStr(value)
l% = Len(st$)
Dim TEXT_RECORD As tText
With TEXT_RECORD
.opcode = 4
.Length = 10
'Length of the text portion of the record
.TextLength = l%
'Total length of the record
.Length = 8 + l
.Row = Row%
.col = col%
.rgbAttr1 = CByte(HiddenLocked)
.rgbAttr2 = CByte(CellFontUsed + CellFormat)
.rgbAttr3 = CByte(Alignment)
'Put record header
Put #FileNumber, , TEXT_RECORD
'Then the actual string data
For a = 1 To l%
b = Asc(Mid$(st$, a, 1))
Put #FileNumber, , b
Next
End With
End Select
WriteValue = 0 'return with no error
Exit Function
Write_Error:
WriteValue = Err.Number
Exit Function
End Function
Get #FileNumber,CellNumber,tInteger
тут главный вопрос - это структура файла. по-идее, когда ты знаешь, что заголовок кончился и что начались ячейки, номер тебе не нужен - ты просто последовательно считываешь следующую порцию в соотв. структуру (а из нее читаешь атрибуты).Чудик писал(а):...как определить, какой тип считывается в текущий момент (нужно же определить как-то длину записи, которая изменяется как раз от ее типа) из файла. И как определить номер считываемой ячейки CellNumber - он же не имеет формат (Row,Cell) как мы привыкли и какой используется, в принципе, при записи.
Type FileData
RecordsCount as Long
NativeDataBase as String
LastUpdated as Long
End Type
Type Record
FName as String
LName as String
Sum as Currency
End Type
Dim FileData_ as FileData
Get #FileNumber,,FileData_
Dim mRecord as Record
For I = 1 To FileData_.RecordsCount
Get #FileNumber,,mRecord
...................................
Next I
Сейчас этот форум просматривают: AhrefsBot, Mail.ru [бот] и гости: 7