You've already forked lazarus-ccr
fpspreadsheet: Fix xlsx reader bug which assumes that sheet files in the xlsx structure are always named "sheet1.xml", "sheet2.xml", etc. Issue #39050, patch by Domenico Mammola.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8763 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -56,6 +56,7 @@ type
|
||||
FPointSeparatorSettings: TFormatSettings;
|
||||
FSharedStrings: TStringList;
|
||||
FSheetList: TFPList;
|
||||
FWorkbookRels: TFPList;
|
||||
FFillList: TFPList;
|
||||
FBorderList: TFPList;
|
||||
FDrawingToSheetRelList: TFPList;
|
||||
@ -443,6 +444,8 @@ type
|
||||
TSheetData = class
|
||||
Name: String;
|
||||
ID: String;
|
||||
RelID : String;
|
||||
Target : String;
|
||||
Hidden: Boolean;
|
||||
SheetRels: TFPList;
|
||||
Drawing_File: String;
|
||||
@ -806,6 +809,7 @@ begin
|
||||
|
||||
FSharedStrings := TStringList.Create;
|
||||
FSheetList := TFPList.Create;
|
||||
FWorkbookRels := TRelationshipList.Create;
|
||||
FFillList := TFPList.Create;
|
||||
FBorderList := TFPList.Create;
|
||||
FHyperlinkList := TFPList.Create;
|
||||
@ -855,6 +859,8 @@ begin
|
||||
TObject(FSheetList[j]).Free;
|
||||
FSheetList.Free;
|
||||
|
||||
FWorkbookRels.Free;
|
||||
|
||||
for j := FSharedStrings.Count-1 downto 0 do
|
||||
FSharedStrings.Objects[j].Free;
|
||||
FSharedStrings.Free;
|
||||
@ -3740,6 +3746,7 @@ begin
|
||||
sheetData := TSheetData.Create;
|
||||
sheetData.Name := GetAttrValue(node, 'name');
|
||||
sheetData.ID := GetAttrvalue(node, 'sheetId');
|
||||
sheetData.RelID := GetAttrvalue(node, 'r:id');
|
||||
sheetData.Hidden := GetAttrValue(node, 'state') = 'hidden';
|
||||
// Add the sheetdata to the SheetList.
|
||||
FSheetList.Add(sheetData);
|
||||
@ -4428,6 +4435,7 @@ begin
|
||||
ReadDateMode(Doc_FindNode('workbookPr'));
|
||||
ReadWorkbookProtection(Doc_FindNode('workbookProtection'));
|
||||
ReadSheetList(Doc_FindNode('sheets')); // This creates the worksheets!
|
||||
ReadRels(AStream, OOXML_PATH_XL_RELS_RELS, FWorkbookRels);
|
||||
ReadSheetRels(AStream);
|
||||
ReadDefinedNames(Doc.DocumentElement.FindNode('definedNames'));
|
||||
ReadActiveSheet(Doc_FindNode('bookViews'), actSheetIndex);
|
||||
@ -4482,7 +4490,11 @@ begin
|
||||
// unzip sheet file
|
||||
XMLStream := CreateXMLStream;
|
||||
try
|
||||
fn := OOXML_PATH_XL_WORKSHEETS + Format('sheet%d.xml', [i+1]);
|
||||
fn := TRelationshipList(FWorkbookRels).FindTarget(sheetData.RelID);
|
||||
if fn = '' then
|
||||
fn := OOXML_PATH_XL_WORKSHEETS + Format('sheet%d.xml', [i+1])
|
||||
else
|
||||
fn := OOXML_PATH_XL_WORKSHEETS + ExtractFileName(fn);
|
||||
if not UnzipToStream(AStream, fn, XMLStream) then
|
||||
Continue;
|
||||
ReadXMLStream(Doc, XMLStream);
|
||||
|
Reference in New Issue
Block a user