Skip to content

Commit 5dc22e8

Browse files
committed
Support get the cell images inserted by IMAGE formula function
1 parent 9999221 commit 5dc22e8

File tree

5 files changed

+174
-67
lines changed

5 files changed

+174
-67
lines changed

excelize.go

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -605,7 +605,7 @@ func (f *File) metadataReader() (*xlsxMetadata, error) {
605605
// deserialization of xl/richData/richvalue.xml.
606606
func (f *File) richValueReader() (*xlsxRichValueData, error) {
607607
var richValue xlsxRichValueData
608-
if err := f.xmlNewDecoder(bytes.NewReader(namespaceStrictToTransitional(f.readXML(defaultXMLRichDataRichValue)))).
608+
if err := f.xmlNewDecoder(bytes.NewReader(namespaceStrictToTransitional(f.readXML(defaultXMLRdRichValuePart)))).
609609
Decode(&richValue); err != nil && err != io.EOF {
610610
return &richValue, err
611611
}
@@ -616,18 +616,43 @@ func (f *File) richValueReader() (*xlsxRichValueData, error) {
616616
// after deserialization of xl/richData/richValueRel.xml.
617617
func (f *File) richValueRelReader() (*xlsxRichValueRels, error) {
618618
var richValueRels xlsxRichValueRels
619-
if err := f.xmlNewDecoder(bytes.NewReader(namespaceStrictToTransitional(f.readXML(defaultXMLRichDataRichValueRel)))).
619+
if err := f.xmlNewDecoder(bytes.NewReader(namespaceStrictToTransitional(f.readXML(defaultXMLRdRichValueRel)))).
620620
Decode(&richValueRels); err != nil && err != io.EOF {
621621
return &richValueRels, err
622622
}
623623
return &richValueRels, nil
624624
}
625625

626-
// getRichDataRichValueRelRelationships provides a function to get drawing
627-
// relationships from xl/richData/_rels/richValueRel.xml.rels by given
628-
// relationship ID.
626+
// richValueWebImageReader provides a function to get the pointer to the
627+
// structure after deserialization of xl/richData/rdRichValueWebImage.xml.
628+
func (f *File) richValueWebImageReader() (*xlsxWebImagesSupportingRichData, error) {
629+
var richValueWebImages xlsxWebImagesSupportingRichData
630+
if err := f.xmlNewDecoder(bytes.NewReader(namespaceStrictToTransitional(f.readXML(defaultXMLRdRichValueWebImagePart)))).
631+
Decode(&richValueWebImages); err != nil && err != io.EOF {
632+
return &richValueWebImages, err
633+
}
634+
return &richValueWebImages, nil
635+
}
636+
637+
// getRichDataRichValueRelRelationships provides a function to get relationships
638+
// from xl/richData/_rels/richValueRel.xml.rels by given relationship ID.
629639
func (f *File) getRichDataRichValueRelRelationships(rID string) *xlsxRelationship {
630-
if rels, _ := f.relsReader(defaultXMLRichDataRichValueRelRels); rels != nil {
640+
if rels, _ := f.relsReader(defaultXMLRdRichValueRelRels); rels != nil {
641+
rels.mu.Lock()
642+
defer rels.mu.Unlock()
643+
for _, v := range rels.Relationships {
644+
if v.ID == rID {
645+
return &v
646+
}
647+
}
648+
}
649+
return nil
650+
}
651+
652+
// getRichValueWebImageRelationships provides a function to get relationships
653+
// from xl/richData/_rels/rdRichValueWebImage.xml.rels by given relationship ID.
654+
func (f *File) getRichValueWebImageRelationships(rID string) *xlsxRelationship {
655+
if rels, _ := f.relsReader(defaultXMLRdRichValueWebImagePartRels); rels != nil {
631656
rels.mu.Lock()
632657
defer rels.mu.Unlock()
633658
for _, v := range rels.Relationships {

picture.go

Lines changed: 56 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type PictureInsertType int
3131
const (
3232
PictureInsertTypePlaceOverCells PictureInsertType = iota
3333
PictureInsertTypePlaceInCell
34+
PictureInsertTypeIMAGE
3435
PictureInsertTypeDISPIMG
3536
)
3637

@@ -450,8 +451,7 @@ func (f *File) addMedia(file []byte, ext string) string {
450451
// GetPictures provides a function to get picture meta info and raw content
451452
// embed in spreadsheet by given worksheet and cell name. This function
452453
// returns the image contents as []byte data types. This function is
453-
// concurrency safe. Note that, this function doesn't support getting cell image
454-
// inserted by IMAGE formula function currently. For example:
454+
// concurrency safe. For example:
455455
//
456456
// f, err := excelize.OpenFile("Book1.xlsx")
457457
// if err != nil {
@@ -507,8 +507,7 @@ func (f *File) GetPictures(sheet, cell string) ([]Picture, error) {
507507
}
508508

509509
// GetPictureCells returns all picture cell references in a worksheet by a
510-
// specific worksheet name. Note that, this function doesn't support getting
511-
// cell image inserted by IMAGE formula function currently.
510+
// specific worksheet name.
512511
func (f *File) GetPictureCells(sheet string) ([]string, error) {
513512
f.mu.Lock()
514513
ws, err := f.workSheetReader(sheet)
@@ -812,7 +811,7 @@ func (f *File) getImageCells(sheet string) ([]string, error) {
812811
}
813812
cells = append(cells, c.R)
814813
}
815-
r, err := f.getImageCellRel(&c)
814+
r, err := f.getImageCellRel(&c, &Picture{})
816815
if err != nil {
817816
return cells, err
818817
}
@@ -825,30 +824,52 @@ func (f *File) getImageCells(sheet string) ([]string, error) {
825824
return cells, err
826825
}
827826

828-
// getImageCellRichValueIdx returns index of the cell image rich value by given
829-
// cell value meta index and meta blocks.
830-
func (f *File) getImageCellRichValueIdx(vm uint, blocks *xlsxMetadataBlocks) (int, error) {
831-
richValueIdx := blocks.Bk[vm-1].Rc[0].V
832-
richValue, err := f.richValueReader()
827+
// getRichDataRichValueRel returns relationship of the cell image by given meta
828+
// blocks value.
829+
func (f *File) getRichDataRichValueRel(val string) (*xlsxRelationship, error) {
830+
var r *xlsxRelationship
831+
idx, err := strconv.Atoi(val)
833832
if err != nil {
834-
return -1, err
833+
return r, err
835834
}
836-
if richValueIdx >= len(richValue.Rv) {
837-
return -1, err
835+
richValueRel, err := f.richValueRelReader()
836+
if err != nil {
837+
return r, err
838838
}
839-
rv := richValue.Rv[richValueIdx].V
840-
if len(rv) != 2 || rv[1] != "5" {
841-
return -1, err
839+
if idx >= len(richValueRel.Rels) {
840+
return r, err
841+
}
842+
rID := richValueRel.Rels[idx].ID
843+
if r = f.getRichDataRichValueRelRelationships(rID); r != nil && r.Type != SourceRelationshipImage {
844+
return nil, err
845+
}
846+
return r, err
847+
}
848+
849+
// getRichDataWebImagesRel returns relationship of a web image by given meta
850+
// blocks value.
851+
func (f *File) getRichDataWebImagesRel(val string) (*xlsxRelationship, error) {
852+
var r *xlsxRelationship
853+
idx, err := strconv.Atoi(val)
854+
if err != nil {
855+
return r, err
842856
}
843-
richValueRelIdx, err := strconv.Atoi(rv[0])
857+
richValueWebImages, err := f.richValueWebImageReader()
844858
if err != nil {
845-
return -1, err
859+
return r, err
860+
}
861+
if idx >= len(richValueWebImages.WebImageSrd) {
862+
return r, err
846863
}
847-
return richValueRelIdx, err
864+
rID := richValueWebImages.WebImageSrd[idx].Blip.RID
865+
if r = f.getRichValueWebImageRelationships(rID); r != nil && r.Type != SourceRelationshipImage {
866+
return nil, err
867+
}
868+
return r, err
848869
}
849870

850871
// getImageCellRel returns the cell image relationship.
851-
func (f *File) getImageCellRel(c *xlsxC) (*xlsxRelationship, error) {
872+
func (f *File) getImageCellRel(c *xlsxC, pic *Picture) (*xlsxRelationship, error) {
852873
var r *xlsxRelationship
853874
if c.Vm == nil || c.V != formulaErrorVALUE {
854875
return r, nil
@@ -861,20 +882,23 @@ func (f *File) getImageCellRel(c *xlsxC) (*xlsxRelationship, error) {
861882
if vmd == nil || int(*c.Vm) > len(vmd.Bk) || len(vmd.Bk[*c.Vm-1].Rc) == 0 {
862883
return r, err
863884
}
864-
richValueRelIdx, err := f.getImageCellRichValueIdx(*c.Vm, vmd)
865-
if err != nil || richValueRelIdx == -1 {
866-
return r, err
867-
}
868-
richValueRel, err := f.richValueRelReader()
885+
richValueIdx := vmd.Bk[*c.Vm-1].Rc[0].V
886+
richValue, err := f.richValueReader()
869887
if err != nil {
870888
return r, err
871889
}
872-
if richValueRelIdx >= len(richValueRel.Rels) {
890+
if richValueIdx >= len(richValue.Rv) {
873891
return r, err
874892
}
875-
rID := richValueRel.Rels[richValueRelIdx].ID
876-
if r = f.getRichDataRichValueRelRelationships(rID); r != nil && r.Type != SourceRelationshipImage {
877-
return nil, err
893+
rv := richValue.Rv[richValueIdx].V
894+
if len(rv) == 2 && rv[1] == "5" {
895+
pic.InsertType = PictureInsertTypePlaceInCell
896+
return f.getRichDataRichValueRel(rv[0])
897+
}
898+
// cell image inserted by IMAGE formula function
899+
if len(rv) > 3 && rv[1]+rv[2] == "10" {
900+
pic.InsertType = PictureInsertTypeIMAGE
901+
return f.getRichDataWebImagesRel(rv[0])
878902
}
879903
return r, err
880904
}
@@ -888,11 +912,12 @@ func (f *File) getCellImages(sheet, cell string) ([]Picture, error) {
888912
return pics, err
889913
}
890914
_, err = f.getCellStringFunc(sheet, cell, func(x *xlsxWorksheet, c *xlsxC) (string, bool, error) {
891-
r, err := f.getImageCellRel(c)
915+
pic := Picture{Format: &GraphicOptions{}, InsertType: PictureInsertTypePlaceInCell}
916+
r, err := f.getImageCellRel(c, &pic)
892917
if err != nil || r == nil {
893918
return "", true, err
894919
}
895-
pic := Picture{Extension: filepath.Ext(r.Target), Format: &GraphicOptions{}, InsertType: PictureInsertTypePlaceInCell}
920+
pic.Extension = filepath.Ext(r.Target)
896921
if buffer, _ := f.Pkg.Load(strings.TrimPrefix(strings.ReplaceAll(r.Target, "..", "xl"), "/")); buffer != nil {
897922
pic.File = buffer.([]byte)
898923
pics = append(pics, pic)

picture_test.go

Lines changed: 51 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ func TestGetPicture(t *testing.T) {
246246
assert.NoError(t, err)
247247
assert.NoError(t, f.SetCellFormula("Sheet1", "F21", "=_xlfn.DISPIMG(\"ID_********************************\",1)"))
248248
f.Pkg.Store(defaultXMLPathCellImages, []byte(`<etc:cellImages xmlns:etc="http://www.wps.cn/officeDocument/2017/etCustomData"><etc:cellImage><xdr:pic><xdr:nvPicPr><xdr:cNvPr id="1" name="ID_********************************" descr="CellImage1"/></xdr:nvPicPr><xdr:blipFill><a:blip r:embed="rId1"/></xdr:blipFill></xdr:pic></etc:cellImage></etc:cellImages>`))
249-
f.Pkg.Store(defaultXMLPathCellImagesRels, []byte(`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Target="media/image1.jpeg"/></Relationships>`))
249+
f.Pkg.Store(defaultXMLPathCellImagesRels, []byte(fmt.Sprintf(`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="%s" Target="media/image1.jpeg"/></Relationships>`, SourceRelationshipImage)))
250250
pics, err = f.GetPictures("Sheet1", "F21")
251251
assert.NoError(t, err)
252252
assert.Len(t, pics, 2)
@@ -457,9 +457,9 @@ func TestGetCellImages(t *testing.T) {
457457
f := NewFile()
458458
assert.NoError(t, f.AddPicture("Sheet1", "A1", filepath.Join("test", "images", "excel.png"), nil))
459459
f.Pkg.Store(defaultXMLMetadata, []byte(`<metadata><valueMetadata count="1"><bk><rc t="1" v="0"/></bk></valueMetadata></metadata>`))
460-
f.Pkg.Store(defaultXMLRichDataRichValue, []byte(`<rvData count="1"><rv s="0"><v>0</v><v>5</v></rv></rvData>`))
461-
f.Pkg.Store(defaultXMLRichDataRichValueRel, []byte(`<richValueRels><rel r:id="rId1"/></richValueRels>`))
462-
f.Pkg.Store(defaultXMLRichDataRichValueRelRels, []byte(fmt.Sprintf(`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="%s" Target="../media/image1.png"/></Relationships>`, SourceRelationshipImage)))
460+
f.Pkg.Store(defaultXMLRdRichValuePart, []byte(`<rvData count="1"><rv s="0"><v>0</v><v>5</v></rv></rvData>`))
461+
f.Pkg.Store(defaultXMLRdRichValueRel, []byte(`<richValueRels><rel r:id="rId1"/></richValueRels>`))
462+
f.Pkg.Store(defaultXMLRdRichValueRelRels, []byte(fmt.Sprintf(`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="%s" Target="../media/image1.png"/></Relationships>`, SourceRelationshipImage)))
463463
f.Sheet.Store("xl/worksheets/sheet1.xml", &xlsxWorksheet{
464464
SheetData: xlsxSheetData{Row: []xlsxRow{
465465
{R: 1, C: []xlsxC{{R: "A1", T: "e", V: formulaErrorVALUE, Vm: uintPtr(1)}}},
@@ -477,19 +477,19 @@ func TestGetCellImages(t *testing.T) {
477477
assert.Equal(t, []string{"A1"}, cells)
478478

479479
// Test get the cell images without image relationships parts
480-
f.Relationships.Delete(defaultXMLRichDataRichValueRelRels)
481-
f.Pkg.Store(defaultXMLRichDataRichValueRelRels, []byte(fmt.Sprintf(`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="%s" Target="../media/image1.png"/></Relationships>`, SourceRelationshipHyperLink)))
480+
f.Relationships.Delete(defaultXMLRdRichValueRelRels)
481+
f.Pkg.Store(defaultXMLRdRichValueRelRels, []byte(fmt.Sprintf(`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="%s" Target="../media/image1.png"/></Relationships>`, SourceRelationshipHyperLink)))
482482
pics, err = f.GetPictures("Sheet1", "A1")
483483
assert.NoError(t, err)
484484
assert.Empty(t, pics)
485485
// Test get the cell images with unsupported charset rich data rich value relationships
486-
f.Relationships.Delete(defaultXMLRichDataRichValueRelRels)
487-
f.Pkg.Store(defaultXMLRichDataRichValueRelRels, MacintoshCyrillicCharset)
486+
f.Relationships.Delete(defaultXMLRdRichValueRelRels)
487+
f.Pkg.Store(defaultXMLRdRichValueRelRels, MacintoshCyrillicCharset)
488488
pics, err = f.GetPictures("Sheet1", "A1")
489489
assert.NoError(t, err)
490490
assert.Empty(t, pics)
491491
// Test get the cell images with unsupported charset rich data rich value
492-
f.Pkg.Store(defaultXMLRichDataRichValueRel, MacintoshCyrillicCharset)
492+
f.Pkg.Store(defaultXMLRdRichValueRel, MacintoshCyrillicCharset)
493493
_, err = f.GetPictures("Sheet1", "A1")
494494
assert.EqualError(t, err, "XML syntax error on line 1: invalid UTF-8")
495495
// Test get the image cells without block of metadata records
@@ -498,7 +498,7 @@ func TestGetCellImages(t *testing.T) {
498498
assert.Empty(t, cells)
499499
// Test get the cell images with rich data rich value relationships
500500
f.Pkg.Store(defaultXMLMetadata, []byte(`<metadata><valueMetadata count="1"><bk><rc t="1" v="0"/></bk></valueMetadata></metadata>`))
501-
f.Pkg.Store(defaultXMLRichDataRichValueRel, []byte(`<richValueRels/>`))
501+
f.Pkg.Store(defaultXMLRdRichValueRel, []byte(`<richValueRels/>`))
502502
pics, err = f.GetPictures("Sheet1", "A1")
503503
assert.NoError(t, err)
504504
assert.Empty(t, pics)
@@ -514,17 +514,17 @@ func TestGetCellImages(t *testing.T) {
514514

515515
f = prepareWorkbook()
516516
// Test get the cell images with empty image cell rich value
517-
f.Pkg.Store(defaultXMLRichDataRichValue, []byte(`<rvData count="1"><rv s="0"><v></v><v>5</v></rv></rvData>`))
517+
f.Pkg.Store(defaultXMLRdRichValuePart, []byte(`<rvData count="1"><rv s="0"><v></v><v>5</v></rv></rvData>`))
518518
pics, err = f.GetPictures("Sheet1", "A1")
519519
assert.EqualError(t, err, "strconv.Atoi: parsing \"\": invalid syntax")
520520
assert.Empty(t, pics)
521521
// Test get the cell images without image cell rich value
522-
f.Pkg.Store(defaultXMLRichDataRichValue, []byte(`<rvData count="1"><rv s="0"><v>0</v><v>1</v></rv></rvData>`))
522+
f.Pkg.Store(defaultXMLRdRichValuePart, []byte(`<rvData count="1"><rv s="0"><v>0</v><v>1</v></rv></rvData>`))
523523
pics, err = f.GetPictures("Sheet1", "A1")
524524
assert.NoError(t, err)
525525
assert.Empty(t, pics)
526526
// Test get the cell images with unsupported charset rich value
527-
f.Pkg.Store(defaultXMLRichDataRichValue, MacintoshCyrillicCharset)
527+
f.Pkg.Store(defaultXMLRdRichValuePart, MacintoshCyrillicCharset)
528528
_, err = f.GetPictures("Sheet1", "A1")
529529
assert.EqualError(t, err, "XML syntax error on line 1: invalid UTF-8")
530530

@@ -534,6 +534,44 @@ func TestGetCellImages(t *testing.T) {
534534
pics, err = f.GetPictures("Sheet1", "A1")
535535
assert.NoError(t, err)
536536
assert.Empty(t, pics)
537+
538+
f = prepareWorkbook()
539+
// Test get the cell images inserted by IMAGE formula function
540+
f.Pkg.Store(defaultXMLRdRichValuePart, []byte(`<rvData count="1"><rv s="1"><v>0</v><v>1</v><v>0</v><v>0</v></rv></rvData>`))
541+
f.Pkg.Store(defaultXMLRdRichValueWebImagePart, []byte(`<webImagesSrd xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><webImageSrd><address r:id="rId1"/><blip r:id="rId2"/></webImageSrd>
542+
</webImagesSrd>`))
543+
f.Pkg.Store(defaultXMLRdRichValueWebImagePartRels, []byte(fmt.Sprintf(`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="%s" Target="https://github.com/xuri/excelize" TargetMode="External"/><Relationship Id="rId2" Type="%s" Target="../media/image1.png"/></Relationships>`, SourceRelationshipHyperLink, SourceRelationshipImage)))
544+
pics, err = f.GetPictures("Sheet1", "A1")
545+
assert.NoError(t, err)
546+
assert.Equal(t, 1, len(pics))
547+
assert.Equal(t, PictureInsertTypeIMAGE, pics[0].InsertType)
548+
549+
// Test get the cell images inserted by IMAGE formula function with unsupported charset web images relationships
550+
f.Relationships.Delete(defaultXMLRdRichValueWebImagePartRels)
551+
f.Pkg.Store(defaultXMLRdRichValueWebImagePartRels, MacintoshCyrillicCharset)
552+
pics, err = f.GetPictures("Sheet1", "A1")
553+
assert.NoError(t, err)
554+
assert.Empty(t, pics)
555+
556+
// Test get the cell images inserted by IMAGE formula function without image part
557+
f.Relationships.Delete(defaultXMLRdRichValueWebImagePartRels)
558+
f.Pkg.Store(defaultXMLRdRichValueWebImagePartRels, []byte(fmt.Sprintf(`<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="%s" Target="https://github.com/xuri/excelize" TargetMode="External"/><Relationship Id="rId2" Type="%s" Target="../media/image1.png"/></Relationships>`, SourceRelationshipHyperLink, SourceRelationshipHyperLink)))
559+
pics, err = f.GetPictures("Sheet1", "A1")
560+
assert.NoError(t, err)
561+
assert.Empty(t, pics)
562+
// Test get the cell images inserted by IMAGE formula function with unsupported charset web images part
563+
f.Pkg.Store(defaultXMLRdRichValueWebImagePart, MacintoshCyrillicCharset)
564+
_, err = f.GetPictures("Sheet1", "A1")
565+
assert.EqualError(t, err, "XML syntax error on line 1: invalid UTF-8")
566+
// Test get the cell images inserted by IMAGE formula function with empty charset web images part
567+
f.Pkg.Store(defaultXMLRdRichValueWebImagePart, []byte(`<webImagesSrd xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" />`))
568+
pics, err = f.GetPictures("Sheet1", "A1")
569+
assert.NoError(t, err)
570+
assert.Empty(t, pics)
571+
// Test get the cell images inserted by IMAGE formula function with invalid rich value index
572+
f.Pkg.Store(defaultXMLRdRichValuePart, []byte(`<rvData count="1"><rv s="1"><v></v><v>1</v><v>0</v><v>0</v></rv></rvData>`))
573+
_, err = f.GetPictures("Sheet1", "A1")
574+
assert.EqualError(t, err, "strconv.Atoi: parsing \"\": invalid syntax")
537575
}
538576

539577
func TestGetImageCells(t *testing.T) {

templates.go

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -266,23 +266,25 @@ var supportedChartDataLabelsPosition = map[ChartType][]ChartDataLabelPositionTyp
266266
}
267267

268268
const (
269-
defaultTempFileSST = "sharedStrings"
270-
defaultXMLMetadata = "xl/metadata.xml"
271-
defaultXMLPathCalcChain = "xl/calcChain.xml"
272-
defaultXMLPathCellImages = "xl/cellimages.xml"
273-
defaultXMLPathCellImagesRels = "xl/_rels/cellimages.xml.rels"
274-
defaultXMLPathContentTypes = "[Content_Types].xml"
275-
defaultXMLPathDocPropsApp = "docProps/app.xml"
276-
defaultXMLPathDocPropsCore = "docProps/core.xml"
277-
defaultXMLPathSharedStrings = "xl/sharedStrings.xml"
278-
defaultXMLPathStyles = "xl/styles.xml"
279-
defaultXMLPathTheme = "xl/theme/theme1.xml"
280-
defaultXMLPathVolatileDeps = "xl/volatileDependencies.xml"
281-
defaultXMLPathWorkbook = "xl/workbook.xml"
282-
defaultXMLPathWorkbookRels = "xl/_rels/workbook.xml.rels"
283-
defaultXMLRichDataRichValue = "xl/richData/rdrichvalue.xml"
284-
defaultXMLRichDataRichValueRel = "xl/richData/richValueRel.xml"
285-
defaultXMLRichDataRichValueRelRels = "xl/richData/_rels/richValueRel.xml.rels"
269+
defaultTempFileSST = "sharedStrings"
270+
defaultXMLMetadata = "xl/metadata.xml"
271+
defaultXMLPathCalcChain = "xl/calcChain.xml"
272+
defaultXMLPathCellImages = "xl/cellimages.xml"
273+
defaultXMLPathCellImagesRels = "xl/_rels/cellimages.xml.rels"
274+
defaultXMLPathContentTypes = "[Content_Types].xml"
275+
defaultXMLPathDocPropsApp = "docProps/app.xml"
276+
defaultXMLPathDocPropsCore = "docProps/core.xml"
277+
defaultXMLPathSharedStrings = "xl/sharedStrings.xml"
278+
defaultXMLPathStyles = "xl/styles.xml"
279+
defaultXMLPathTheme = "xl/theme/theme1.xml"
280+
defaultXMLPathVolatileDeps = "xl/volatileDependencies.xml"
281+
defaultXMLPathWorkbook = "xl/workbook.xml"
282+
defaultXMLPathWorkbookRels = "xl/_rels/workbook.xml.rels"
283+
defaultXMLRdRichValuePart = "xl/richData/rdrichvalue.xml"
284+
defaultXMLRdRichValueRel = "xl/richData/richValueRel.xml"
285+
defaultXMLRdRichValueRelRels = "xl/richData/_rels/richValueRel.xml.rels"
286+
defaultXMLRdRichValueWebImagePart = "xl/richData/rdRichValueWebImage.xml"
287+
defaultXMLRdRichValueWebImagePartRels = "xl/richData/_rels/rdRichValueWebImage.xml.rels"
286288
)
287289

288290
// IndexedColorMapping is the table of default mappings from indexed color value

0 commit comments

Comments
 (0)