fpspreadsheet: Initial excel5 reader support.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@657 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
sekelsenmat
2009-01-10 22:58:00 +00:00
parent 6bc68ea9b5
commit 1d2b67596d
7 changed files with 334 additions and 182 deletions

View File

@@ -10,7 +10,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<Title Value="excel2read"/> <Title Value="excel2read"/>
<ActiveEditorIndexAtStart Value="4"/> <ActiveEditorIndexAtStart Value="3"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
@@ -69,8 +69,8 @@
<Unit4> <Unit4>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="..\..\xlsbiff5.pas"/>
<UnitName Value="xlsbiff5"/> <UnitName Value="xlsbiff5"/>
<CursorPos X="29" Y="1"/> <CursorPos X="37" Y="934"/>
<TopLine Value="22"/> <TopLine Value="918"/>
<EditorIndex Value="3"/> <EditorIndex Value="3"/>
<UsageCount Value="140"/> <UsageCount Value="140"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -78,8 +78,8 @@
<Unit5> <Unit5>
<Filename Value="..\..\fpsutils.pas"/> <Filename Value="..\..\fpsutils.pas"/>
<UnitName Value="fpsutils"/> <UnitName Value="fpsutils"/>
<CursorPos X="1" Y="49"/> <CursorPos X="10" Y="15"/>
<TopLine Value="30"/> <TopLine Value="5"/>
<EditorIndex Value="2"/> <EditorIndex Value="2"/>
<UsageCount Value="140"/> <UsageCount Value="140"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -87,8 +87,8 @@
<Unit6> <Unit6>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<UnitName Value="xlsbiff2"/> <UnitName Value="xlsbiff2"/>
<CursorPos X="16" Y="357"/> <CursorPos X="1" Y="311"/>
<TopLine Value="347"/> <TopLine Value="293"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<UsageCount Value="139"/> <UsageCount Value="139"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -96,8 +96,8 @@
<Unit7> <Unit7>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<UnitName Value="fpolestorage"/> <UnitName Value="fpolestorage"/>
<CursorPos X="30" Y="654"/> <CursorPos X="12" Y="748"/>
<TopLine Value="642"/> <TopLine Value="766"/>
<EditorIndex Value="5"/> <EditorIndex Value="5"/>
<UsageCount Value="139"/> <UsageCount Value="139"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -120,7 +120,7 @@
<CursorPos X="2" Y="714"/> <CursorPos X="2" Y="714"/>
<TopLine Value="701"/> <TopLine Value="701"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="92"/> <UsageCount Value="93"/>
<Loaded Value="True"/> <Loaded Value="True"/>
</Unit10> </Unit10>
<Unit11> <Unit11>
@@ -139,123 +139,123 @@
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="309" Column="1" TopLine="299"/> <Caret Line="312" Column="1" TopLine="302"/>
</Position1> </Position1>
<Position2> <Position2>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="310" Column="1" TopLine="300"/> <Caret Line="314" Column="1" TopLine="304"/>
</Position2> </Position2>
<Position3> <Position3>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="312" Column="1" TopLine="302"/> <Caret Line="317" Column="1" TopLine="307"/>
</Position3> </Position3>
<Position4> <Position4>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="314" Column="1" TopLine="304"/> <Caret Line="326" Column="1" TopLine="316"/>
</Position4> </Position4>
<Position5> <Position5>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="317" Column="1" TopLine="307"/> <Caret Line="328" Column="1" TopLine="318"/>
</Position5> </Position5>
<Position6> <Position6>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="326" Column="1" TopLine="316"/> <Caret Line="309" Column="1" TopLine="299"/>
</Position6> </Position6>
<Position7> <Position7>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="328" Column="1" TopLine="318"/> <Caret Line="310" Column="1" TopLine="300"/>
</Position7> </Position7>
<Position8> <Position8>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="309" Column="1" TopLine="299"/> <Caret Line="312" Column="1" TopLine="302"/>
</Position8> </Position8>
<Position9> <Position9>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="310" Column="1" TopLine="300"/> <Caret Line="314" Column="1" TopLine="304"/>
</Position9> </Position9>
<Position10> <Position10>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="312" Column="1" TopLine="302"/> <Caret Line="317" Column="1" TopLine="307"/>
</Position10> </Position10>
<Position11> <Position11>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="314" Column="1" TopLine="304"/> <Caret Line="326" Column="1" TopLine="316"/>
</Position11> </Position11>
<Position12> <Position12>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="317" Column="1" TopLine="307"/> <Caret Line="328" Column="1" TopLine="318"/>
</Position12> </Position12>
<Position13> <Position13>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="326" Column="1" TopLine="316"/> <Caret Line="309" Column="1" TopLine="299"/>
</Position13> </Position13>
<Position14> <Position14>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="328" Column="1" TopLine="318"/> <Caret Line="310" Column="1" TopLine="300"/>
</Position14> </Position14>
<Position15> <Position15>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="309" Column="1" TopLine="299"/> <Caret Line="312" Column="1" TopLine="302"/>
</Position15> </Position15>
<Position16> <Position16>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="310" Column="1" TopLine="300"/> <Caret Line="314" Column="1" TopLine="304"/>
</Position16> </Position16>
<Position17> <Position17>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="312" Column="1" TopLine="302"/> <Caret Line="320" Column="1" TopLine="310"/>
</Position17> </Position17>
<Position18> <Position18>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="314" Column="1" TopLine="304"/> <Caret Line="100" Column="16" TopLine="87"/>
</Position18> </Position18>
<Position19> <Position19>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="317" Column="1" TopLine="307"/> <Caret Line="357" Column="16" TopLine="348"/>
</Position19> </Position19>
<Position20> <Position20>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="326" Column="1" TopLine="316"/> <Caret Line="354" Column="6" TopLine="344"/>
</Position20> </Position20>
<Position21> <Position21>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="328" Column="1" TopLine="318"/> <Caret Line="356" Column="14" TopLine="340"/>
</Position21> </Position21>
<Position22> <Position22>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\fpsutils.pas"/>
<Caret Line="309" Column="1" TopLine="299"/> <Caret Line="48" Column="20" TopLine="34"/>
</Position22> </Position22>
<Position23> <Position23>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\fpsutils.pas"/>
<Caret Line="310" Column="1" TopLine="300"/> <Caret Line="11" Column="3" TopLine="1"/>
</Position23> </Position23>
<Position24> <Position24>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\fpsutils.pas"/>
<Caret Line="312" Column="1" TopLine="302"/> <Caret Line="90" Column="5" TopLine="71"/>
</Position24> </Position24>
<Position25> <Position25>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="314" Column="1" TopLine="304"/> <Caret Line="654" Column="30" TopLine="642"/>
</Position25> </Position25>
<Position26> <Position26>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="320" Column="1" TopLine="310"/> <Caret Line="218" Column="24" TopLine="210"/>
</Position26> </Position26>
<Position27> <Position27>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="100" Column="16" TopLine="87"/> <Caret Line="355" Column="6" TopLine="347"/>
</Position27> </Position27>
<Position28> <Position28>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<Caret Line="357" Column="16" TopLine="348"/> <Caret Line="123" Column="26" TopLine="106"/>
</Position28> </Position28>
<Position29> <Position29>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\fpsutils.pas"/>
<Caret Line="354" Column="6" TopLine="344"/> <Caret Line="69" Column="5" TopLine="50"/>
</Position29> </Position29>
<Position30> <Position30>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="356" Column="14" TopLine="340"/> <Caret Line="901" Column="1" TopLine="882"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>

View File

@@ -10,7 +10,7 @@
<MainUnit Value="0"/> <MainUnit Value="0"/>
<TargetFileExt Value=".exe"/> <TargetFileExt Value=".exe"/>
<Title Value="excel5read"/> <Title Value="excel5read"/>
<ActiveEditorIndexAtStart Value="1"/> <ActiveEditorIndexAtStart Value="3"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/> <ProjectVersion Value=""/>
@@ -39,8 +39,8 @@
<Filename Value="excel5read.lpr"/> <Filename Value="excel5read.lpr"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="excel5read"/> <UnitName Value="excel5read"/>
<CursorPos X="1" Y="21"/> <CursorPos X="16" Y="38"/>
<TopLine Value="3"/> <TopLine Value="30"/>
<EditorIndex Value="0"/> <EditorIndex Value="0"/>
<UsageCount Value="309"/> <UsageCount Value="309"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -69,8 +69,8 @@
<Unit4> <Unit4>
<Filename Value="..\..\xlsbiff5.pas"/> <Filename Value="..\..\xlsbiff5.pas"/>
<UnitName Value="xlsbiff5"/> <UnitName Value="xlsbiff5"/>
<CursorPos X="15" Y="64"/> <CursorPos X="1" Y="910"/>
<TopLine Value="54"/> <TopLine Value="904"/>
<EditorIndex Value="3"/> <EditorIndex Value="3"/>
<UsageCount Value="140"/> <UsageCount Value="140"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -87,8 +87,8 @@
<Unit6> <Unit6>
<Filename Value="..\..\xlsbiff2.pas"/> <Filename Value="..\..\xlsbiff2.pas"/>
<UnitName Value="xlsbiff2"/> <UnitName Value="xlsbiff2"/>
<CursorPos X="1" Y="69"/> <CursorPos X="1" Y="365"/>
<TopLine Value="57"/> <TopLine Value="363"/>
<EditorIndex Value="4"/> <EditorIndex Value="4"/>
<UsageCount Value="139"/> <UsageCount Value="139"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -96,8 +96,8 @@
<Unit7> <Unit7>
<Filename Value="..\..\fpolestorage.pas"/> <Filename Value="..\..\fpolestorage.pas"/>
<UnitName Value="fpolestorage"/> <UnitName Value="fpolestorage"/>
<CursorPos X="30" Y="654"/> <CursorPos X="78" Y="806"/>
<TopLine Value="642"/> <TopLine Value="798"/>
<EditorIndex Value="5"/> <EditorIndex Value="5"/>
<UsageCount Value="139"/> <UsageCount Value="139"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -117,8 +117,8 @@
<Unit10> <Unit10>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<UnitName Value="fpspreadsheet"/> <UnitName Value="fpspreadsheet"/>
<CursorPos X="1" Y="197"/> <CursorPos X="47" Y="149"/>
<TopLine Value="189"/> <TopLine Value="133"/>
<EditorIndex Value="1"/> <EditorIndex Value="1"/>
<UsageCount Value="92"/> <UsageCount Value="92"/>
<Loaded Value="True"/> <Loaded Value="True"/>
@@ -138,124 +138,124 @@
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29"> <JumpHistory Count="30" HistoryIndex="29">
<Position1> <Position1>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="486" Column="5" TopLine="467"/>
</Position1>
<Position2>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="510" Column="5" TopLine="491"/>
</Position2>
<Position3>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="94" Column="46" TopLine="84"/>
</Position3>
<Position4>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="686" Column="5" TopLine="667"/>
</Position4>
<Position5>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="567" Column="5" TopLine="548"/>
</Position5>
<Position6>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="622" Column="1" TopLine="618"/>
</Position6>
<Position7>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="621" Column="29" TopLine="611"/>
</Position7>
<Position8>
<Filename Value="excel5read.lpr"/>
<Caret Line="40" Column="17" TopLine="29"/>
</Position8>
<Position9>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="85" Column="3" TopLine="83"/>
</Position9>
<Position10>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="304" Column="5" TopLine="293"/>
</Position10>
<Position11>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="319" Column="32" TopLine="305"/>
</Position11>
<Position12>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="363" Column="15" TopLine="349"/>
</Position12>
<Position13>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="362" Column="36" TopLine="353"/>
</Position13>
<Position14>
<Filename Value="excel5read.lpr"/>
<Caret Line="40" Column="17" TopLine="29"/>
</Position14>
<Position15>
<Filename Value="excel5read.lpr"/>
<Caret Line="24" Column="1" TopLine="13"/>
</Position15>
<Position16>
<Filename Value="excel5read.lpr"/>
<Caret Line="29" Column="6" TopLine="19"/>
</Position16>
<Position17>
<Filename Value="excel5read.lpr"/>
<Caret Line="16" Column="17" TopLine="6"/>
</Position17>
<Position18>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="110" Column="3" TopLine="108"/>
</Position18>
<Position19>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="475" Column="5" TopLine="456"/>
</Position19>
<Position20>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="505" Column="42" TopLine="496"/>
</Position20>
<Position21>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="175" Column="24" TopLine="165"/>
</Position21>
<Position22>
<Filename Value="excel5read.lpr"/>
<Caret Line="16" Column="17" TopLine="6"/>
</Position22>
<Position23>
<Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="143" Column="15" TopLine="115"/>
</Position23>
<Position24>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="119" Column="67" TopLine="108"/> <Caret Line="119" Column="67" TopLine="108"/>
</Position24> </Position1>
<Position25> <Position2>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="485" Column="42" TopLine="474"/> <Caret Line="485" Column="42" TopLine="474"/>
</Position25> </Position2>
<Position26> <Position3>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="161" Column="3" TopLine="159"/> <Caret Line="161" Column="3" TopLine="159"/>
</Position26> </Position3>
<Position27> <Position4>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="141" Column="3" TopLine="139"/> <Caret Line="141" Column="3" TopLine="139"/>
</Position27> </Position4>
<Position28> <Position5>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="669" Column="20" TopLine="658"/> <Caret Line="669" Column="20" TopLine="658"/>
</Position28> </Position5>
<Position29> <Position6>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="158" Column="15" TopLine="143"/> <Caret Line="158" Column="15" TopLine="143"/>
</Position29> </Position6>
<Position30> <Position7>
<Filename Value="..\..\fpspreadsheet.pas"/> <Filename Value="..\..\fpspreadsheet.pas"/>
<Caret Line="116" Column="71" TopLine="106"/> <Caret Line="116" Column="71" TopLine="106"/>
</Position7>
<Position8>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="886" Column="1" TopLine="876"/>
</Position8>
<Position9>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="888" Column="1" TopLine="878"/>
</Position9>
<Position10>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="891" Column="1" TopLine="881"/>
</Position10>
<Position11>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="894" Column="1" TopLine="884"/>
</Position11>
<Position12>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="895" Column="1" TopLine="885"/>
</Position12>
<Position13>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="897" Column="1" TopLine="887"/>
</Position13>
<Position14>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="899" Column="1" TopLine="889"/>
</Position14>
<Position15>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="904" Column="14" TopLine="895"/>
</Position15>
<Position16>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="768" Column="1" TopLine="765"/>
</Position16>
<Position17>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="886" Column="1" TopLine="876"/>
</Position17>
<Position18>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="888" Column="1" TopLine="878"/>
</Position18>
<Position19>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="891" Column="1" TopLine="881"/>
</Position19>
<Position20>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="886" Column="1" TopLine="867"/>
</Position20>
<Position21>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="894" Column="1" TopLine="882"/>
</Position21>
<Position22>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="64" Column="41" TopLine="60"/>
</Position22>
<Position23>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="70" Column="24" TopLine="60"/>
</Position23>
<Position24>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="797" Column="16" TopLine="784"/>
</Position24>
<Position25>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="670" Column="37" TopLine="655"/>
</Position25>
<Position26>
<Filename Value="..\..\fpolestorage.pas"/>
<Caret Line="666" Column="13" TopLine="659"/>
</Position26>
<Position27>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="895" Column="1" TopLine="885"/>
</Position27>
<Position28>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="908" Column="1" TopLine="898"/>
</Position28>
<Position29>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="910" Column="1" TopLine="900"/>
</Position29>
<Position30>
<Filename Value="..\..\xlsbiff5.pas"/>
<Caret Line="913" Column="1" TopLine="903"/>
</Position30> </Position30>
</JumpHistory> </JumpHistory>
</ProjectOptions> </ProjectOptions>
@@ -270,4 +270,12 @@
<CompilerPath Value="$(CompPath)"/> <CompilerPath Value="$(CompPath)"/>
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging>
<BreakPoints Count="1">
<Item1>
<Source Value="..\..\xlsbiff5.pas"/>
<Line Value="910"/>
</Item1>
</BreakPoints>
</Debugging>
</CONFIG> </CONFIG>

View File

@@ -36,7 +36,7 @@ begin
WriteLn('Contents of the first worksheet of the file:'); WriteLn('Contents of the first worksheet of the file:');
WriteLn(''); WriteLn('');
for i := 0 to MyWorksheet.GetCellCount do for i := 0 to MyWorksheet.GetCellCount - 1 do
begin begin
CurCell := MyWorkSheet.GetCellByIndex(i); CurCell := MyWorkSheet.GetCellByIndex(i);
WriteLn('Row: ', CurCell^.Row, ' Col: ', CurCell^.Col, ' Value: ', WriteLn('Row: ', CurCell^.Row, ' Col: ', CurCell^.Col, ' Value: ',

View File

@@ -623,7 +623,7 @@ begin
AStream.ReadDWord(); AStream.ReadDWord();
AStream.ReadDWord(); AStream.ReadDWord();
AIsStorage := AStream.ReadDWord() <> $FFFFFFFF; AIsStorage := DWordLEtoN(AStream.ReadDWord) <> $FFFFFFFF;
{Root Storage #1 {Root Storage #1
00000470H XX XX XX XX 03 00 00 00 40 03 00 00 00 00 00 00 00000470H XX XX XX XX 03 00 00 00 40 03 00 00 00 00 00 00
@@ -649,9 +649,9 @@ begin
AStream.Seek(BaseAddr + $74, soFromBeginning); AStream.Seek(BaseAddr + $74, soFromBeginning);
AFirstSecID := AStream.ReadDWord(); AFirstSecID := DWordLEtoN(AStream.ReadDWord);
AStreamSize := AStream.ReadDWord(); AStreamSize := DWordLEtoN(AStream.ReadDWord);
AStream.ReadDWord(); AStream.ReadDWord();
end; end;
@@ -662,8 +662,12 @@ begin
end; end;
procedure TOLEStorage.ReadUserStream(ADest, ASource: TStream); procedure TOLEStorage.ReadUserStream(ADest, ASource: TStream);
var
i: Integer;
begin begin
ADest.CopyFrom(ASource, FReadingStreamSize); // ADest.CopyFrom(ASource, FReadingStreamSize);
for i := 1 to FReadingStreamSize do
ADest.WriteByte(ASource.ReadByte);
end; end;
constructor TOLEStorage.Create; constructor TOLEStorage.Create;
@@ -753,7 +757,7 @@ begin
end; end;
{@@ {@@
Reads an OLE file. Experimental Reads an OLE file.
} }
procedure TOLEStorage.ReadOLEFile(AFileName: string; procedure TOLEStorage.ReadOLEFile(AFileName: string;
AOLEDocument: TOLEDocument); AOLEDocument: TOLEDocument);
@@ -761,6 +765,7 @@ var
AFileStream: TFileStream; AFileStream: TFileStream;
CurrentSectorPos: Int64; CurrentSectorPos: Int64;
begin begin
FOLEDocument := AOLEDocument;
AOLEDocument.Stream := TMemoryStream.Create; AOLEDocument.Stream := TMemoryStream.Create;
AFileStream := TFileStream.Create(AFileName, fmOpenRead); AFileStream := TFileStream.Create(AFileName, fmOpenRead);
try try
@@ -800,9 +805,12 @@ begin
end; end;
end; end;
{@@
Frees all internal objects storable in a TOLEDocument structure
}
procedure TOLEStorage.FreeOLEDocumentData(AOLEDocument: TOLEDocument); procedure TOLEStorage.FreeOLEDocumentData(AOLEDocument: TOLEDocument);
begin begin
AOLEDocument.Stream.Free; if Assigned(AOLEDocument.Stream) then FreeAndNil(AOLEDocument.Stream);
end; end;
end. end.

View File

@@ -11,6 +11,9 @@ function WordToLE(AValue: Word): Word;
function DWordToLE(AValue: Cardinal): Cardinal; function DWordToLE(AValue: Cardinal): Cardinal;
function IntegerToLE(AValue: Integer): Integer; function IntegerToLE(AValue: Integer): Integer;
function WordLEtoN(AValue: Word): Word;
function DWordLEtoN(AValue: Cardinal): Cardinal;
implementation implementation
{ {
@@ -19,12 +22,19 @@ implementation
Excel files are all written with Little Endian byte order, Excel files are all written with Little Endian byte order,
so it's necessary to swap the data to be able to build a so it's necessary to swap the data to be able to build a
correct file on big endian systems. correct file on big endian systems.
These routines are preferable to System unit routines because they
ensure that the correct overloaded version of the conversion routines
will be used, avoiding typecasts which are less readable.
They also guarantee delphi compatibility. For Delphi we just support
big-endian isn't support, because Delphi doesn't support it.
} }
function WordToLE(AValue: Word): Word; function WordToLE(AValue: Word): Word;
begin begin
{$IFDEF BIG_ENDIAN} {$IFDEF FPC}
Result := ((AValue shl 8) and $FF00) or ((AValue shr 8) and $00FF); Result := NtoLE(AValue);
{$ELSE} {$ELSE}
Result := AValue; Result := AValue;
{$ENDIF} {$ENDIF}
@@ -32,8 +42,8 @@ end;
function DWordToLE(AValue: Cardinal): Cardinal; function DWordToLE(AValue: Cardinal): Cardinal;
begin begin
{$IFDEF BIG_ENDIAN} {$IFDEF FPC}
// ?? Result := ((AValue shl 8) and $FF00) or ((AValue shr 8) and $00FF); Result := NtoLE(AValue);
{$ELSE} {$ELSE}
Result := AValue; Result := AValue;
{$ENDIF} {$ENDIF}
@@ -41,8 +51,26 @@ end;
function IntegerToLE(AValue: Integer): Integer; function IntegerToLE(AValue: Integer): Integer;
begin begin
{$IFDEF BIG_ENDIAN} {$IFDEF FPC}
// ?? Result := ((AValue shl 8) and $FF00) or ((AValue shr 8) and $00FF); Result := NtoLE(AValue);
{$ELSE}
Result := AValue;
{$ENDIF}
end;
function WordLEtoN(AValue: Word): Word;
begin
{$IFDEF FPC}
Result := LEtoN(AValue);
{$ELSE}
Result := AValue;
{$ENDIF}
end;
function DWordLEtoN(AValue: Cardinal): Cardinal;
begin
{$IFDEF FPC}
Result := LEtoN(AValue);
{$ELSE} {$ELSE}
Result := AValue; Result := AValue;
{$ENDIF} {$ENDIF}

View File

@@ -306,8 +306,8 @@ begin
while not BIFF2EOF do while not BIFF2EOF do
begin begin
{ Read the record header } { Read the record header }
RecordType := AStream.ReadWord; RecordType := WordLEToN(AStream.ReadWord);
RecordSize := AStream.ReadWord; RecordSize := WordLEToN(AStream.ReadWord);
CurStreamPos := AStream.Position; CurStreamPos := AStream.Position;
@@ -342,8 +342,8 @@ var
AStrValue: ansistring; AStrValue: ansistring;
begin begin
{ BIFF Record data } { BIFF Record data }
ARow := AStream.ReadWord(); ARow := WordLEToN(AStream.ReadWord);
ACol := AStream.ReadWord(); ACol := WordLEToN(AStream.ReadWord);
{ BIFF2 Attributes } { BIFF2 Attributes }
AStream.ReadByte(); AStream.ReadByte();
@@ -366,8 +366,8 @@ var
AValue: Double; AValue: Double;
begin begin
{ BIFF Record data } { BIFF Record data }
ARow := AStream.ReadWord(); ARow := WordLEToN(AStream.ReadWord);
ACol := AStream.ReadWord(); ACol := WordLEToN(AStream.ReadWord);
{ BIFF2 Attributes } { BIFF2 Attributes }
AStream.ReadByte(); AStream.ReadByte();

View File

@@ -59,6 +59,22 @@ uses
type type
{ TsSpreadBIFF5Reader }
TsSpreadBIFF5Reader = class(TsCustomSpreadReader)
private
RecordSize: Word;
FWorksheet: TsWorksheet;
public
{ General reading methods }
procedure ReadFromFile(AFileName: string; AData: TsWorkbook); override;
procedure ReadFromStream(AStream: TStream; AData: TsWorkbook); override;
{ Record writing methods }
procedure ReadFormula(AStream: TStream); override;
procedure ReadLabel(AStream: TStream); override;
procedure ReadNumber(AStream: TStream); override;
end;
{ TsSpreadBIFF5Writer } { TsSpreadBIFF5Writer }
TsSpreadBIFF5Writer = class(TsCustomSpreadWriter) TsSpreadBIFF5Writer = class(TsCustomSpreadWriter)
@@ -859,9 +875,101 @@ end;
* Registers this reader / writer on fpSpreadsheet * Registers this reader / writer on fpSpreadsheet
* *
*******************************************************************} *******************************************************************}
{ TsSpreadBIFF5Reader }
procedure TsSpreadBIFF5Reader.ReadFromFile(AFileName: string; AData: TsWorkbook);
var
MemStream: TMemoryStream;
OLEStorage: TOLEStorage;
OLEDocument: TOLEDocument;
begin
MemStream := TMemoryStream.Create;
OLEStorage := TOLEStorage.Create;
try
// Only one stream is necessary for any number of worksheets
OLEDocument.Stream := MemStream;
OLEStorage.ReadOLEFile(AFileName, OLEDocument);
// Rewind the stream and read from it
MemStream.Position := 0;
ReadFromStream(MemStream, AData);
finally
MemStream.Free;
OLEStorage.Free;
end;
end;
procedure TsSpreadBIFF5Reader.ReadFromStream(AStream: TStream; AData: TsWorkbook);
var
BIFF5EOF: Boolean;
RecordType: Word;
CurStreamPos: Int64;
begin
BIFF5EOF := False;
FWorksheet := AData.AddWorksheet('');
{ Read all records in a loop }
while not BIFF5EOF do
begin
{ Read the record header }
RecordType := WordLEToN(AStream.ReadWord);
RecordSize := WordLEToN(AStream.ReadWord);
CurStreamPos := AStream.Position;
case RecordType of
INT_EXCEL_ID_NUMBER: ReadNumber(AStream);
INT_EXCEL_ID_LABEL: ReadLabel(AStream);
INT_EXCEL_ID_FORMULA: ReadFormula(AStream);
INT_EXCEL_ID_BOF: ;
INT_EXCEL_ID_EOF: BIFF5EOF := True;
else
// nothing
end;
// Make sure we are in the right position for the next record
AStream.Seek(CurStreamPos + RecordSize, soFromBeginning);
if AStream.Position >= AStream.Size then BIFF5EOF := True;
end;
end;
procedure TsSpreadBIFF5Reader.ReadFormula(AStream: TStream);
begin
end;
procedure TsSpreadBIFF5Reader.ReadLabel(AStream: TStream);
begin
end;
procedure TsSpreadBIFF5Reader.ReadNumber(AStream: TStream);
var
ARow, ACol: Word;
AValue: Double;
begin
{ BIFF Record data }
ARow := WordLEToN(AStream.ReadWord);
ACol := WordLEToN(AStream.ReadWord);
{ Index to XF record }
AStream.ReadWord();
{ IEE 754 floating-point value }
AStream.ReadBuffer(AValue, 8);
{ Save the data }
FWorksheet.WriteNumber(ARow, ACol, AValue);
end;
initialization initialization
RegisterSpreadFormat(TsCustomSpreadReader, TsSpreadBIFF5Writer, sfExcel5); RegisterSpreadFormat(TsSpreadBIFF5Reader, TsSpreadBIFF5Writer, sfExcel5);
end. end.