From 1c45425f12f38012b975c36f4d17bd1cec3c0aba Mon Sep 17 00:00:00 2001 From: xuri Date: Wed, 17 Oct 2018 00:28:31 +0800 Subject: [PATCH] resolve #276, add OfficeOpenXML-XMLSchema-Strict mode support --- chart.go | 2 +- excelize.go | 2 +- lib.go | 16 ++++++++++++++++ picture.go | 12 ++++++------ sheet.go | 8 ++++---- styles.go | 4 ++-- test/Book1.xlsx | Bin 23099 -> 33070 bytes xmlDrawing.go | 41 +++++++++++++++++++++++------------------ 8 files changed, 53 insertions(+), 32 deletions(-) diff --git a/chart.go b/chart.go index 5353a329..edfcab7f 100644 --- a/chart.go +++ b/chart.go @@ -1097,7 +1097,7 @@ func (f *File) drawingParser(drawingXML string, content *xlsxWsDr) int { _, ok := f.XLSX[drawingXML] if ok { // Append Model decodeWsDr := decodeWsDr{} - _ = xml.Unmarshal([]byte(f.readXML(drawingXML)), &decodeWsDr) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(drawingXML)), &decodeWsDr) content.R = decodeWsDr.R cNvPrID = len(decodeWsDr.OneCellAnchor) + len(decodeWsDr.TwoCellAnchor) + 1 for _, v := range decodeWsDr.OneCellAnchor { diff --git a/excelize.go b/excelize.go index d1f0b7f1..36a6d8a9 100644 --- a/excelize.go +++ b/excelize.go @@ -100,7 +100,7 @@ func (f *File) workSheetReader(sheet string) *xlsxWorksheet { } if f.Sheet[name] == nil { var xlsx xlsxWorksheet - _ = xml.Unmarshal(f.readXML(name), &xlsx) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(name)), &xlsx) if f.checked == nil { f.checked = make(map[string]bool) } diff --git a/lib.go b/lib.go index 865ee296..8e63da9f 100644 --- a/lib.go +++ b/lib.go @@ -183,3 +183,19 @@ func parseFormatSet(formatSet string) []byte { } return []byte("{}") } + +// namespaceStrictToTransitional provides a method to convert Strict and +// Transitional namespaces. +func namespaceStrictToTransitional(content []byte) []byte { + var namespaceTranslationDic = map[string]string{ + StrictSourceRelationship: SourceRelationship, + StrictSourceRelationshipChart: SourceRelationshipChart, + StrictSourceRelationshipComments: SourceRelationshipComments, + StrictSourceRelationshipImage: SourceRelationshipImage, + StrictNameSpaceSpreadSheet: NameSpaceSpreadSheet, + } + for s, n := range namespaceTranslationDic { + content = bytes.Replace(content, []byte(s), []byte(n), -1) + } + return content +} diff --git a/picture.go b/picture.go index 8785aaf5..9efd875a 100644 --- a/picture.go +++ b/picture.go @@ -185,7 +185,7 @@ func (f *File) addSheetRelationships(sheet, relType, target, targetMode string) _, ok = f.XLSX[rels] if ok { ID.Reset() - _ = xml.Unmarshal([]byte(f.readXML(rels)), &sheetRels) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(rels)), &sheetRels) rID = len(sheetRels.Relationships) + 1 ID.WriteString("rId") ID.WriteString(strconv.Itoa(rID)) @@ -211,7 +211,7 @@ func (f *File) deleteSheetRelationships(sheet, rID string) { } var rels = "xl/worksheets/_rels/" + strings.TrimPrefix(name, "xl/worksheets/") + ".rels" var sheetRels xlsxWorkbookRels - _ = xml.Unmarshal([]byte(f.readXML(rels)), &sheetRels) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(rels)), &sheetRels) for k, v := range sheetRels.Relationships { if v.ID == rID { sheetRels.Relationships = append(sheetRels.Relationships[:k], sheetRels.Relationships[k+1:]...) @@ -328,7 +328,7 @@ func (f *File) addDrawingRelationships(index int, relType, target, targetMode st _, ok := f.XLSX[rels] if ok { ID.Reset() - _ = xml.Unmarshal([]byte(f.readXML(rels)), &drawingRels) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(rels)), &drawingRels) rID = len(drawingRels.Relationships) + 1 ID.WriteString("rId") ID.WriteString(strconv.Itoa(rID)) @@ -448,7 +448,7 @@ func (f *File) getSheetRelationshipsTargetByID(sheet, rID string) string { } var rels = "xl/worksheets/_rels/" + strings.TrimPrefix(name, "xl/worksheets/") + ".rels" var sheetRels xlsxWorkbookRels - _ = xml.Unmarshal([]byte(f.readXML(rels)), &sheetRels) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(rels)), &sheetRels) for _, v := range sheetRels.Relationships { if v.ID == rID { return v.Target @@ -488,7 +488,7 @@ func (f *File) GetPicture(sheet, cell string) (string, []byte) { return "", nil } decodeWsDr := decodeWsDr{} - _ = xml.Unmarshal([]byte(f.readXML(drawingXML)), &decodeWsDr) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(drawingXML)), &decodeWsDr) cell = strings.ToUpper(cell) fromCol := string(strings.Map(letterOnlyMapF, cell)) @@ -523,7 +523,7 @@ func (f *File) getDrawingRelationships(rels, rID string) *xlsxWorkbookRelation { return nil } var drawingRels xlsxWorkbookRels - _ = xml.Unmarshal([]byte(f.readXML(rels)), &drawingRels) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(rels)), &drawingRels) for _, v := range drawingRels.Relationships { if v.ID == rID { return &v diff --git a/sheet.go b/sheet.go index 2344218c..7b97d3e8 100644 --- a/sheet.go +++ b/sheet.go @@ -51,7 +51,7 @@ func (f *File) NewSheet(name string) int { func (f *File) contentTypesReader() *xlsxTypes { if f.ContentTypes == nil { var content xlsxTypes - _ = xml.Unmarshal([]byte(f.readXML("[Content_Types].xml")), &content) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML("[Content_Types].xml")), &content) f.ContentTypes = &content } return f.ContentTypes @@ -71,7 +71,7 @@ func (f *File) contentTypesWriter() { func (f *File) workbookReader() *xlsxWorkbook { if f.WorkBook == nil { var content xlsxWorkbook - _ = xml.Unmarshal([]byte(f.readXML("xl/workbook.xml")), &content) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML("xl/workbook.xml")), &content) f.WorkBook = &content } return f.WorkBook @@ -162,7 +162,7 @@ func (f *File) setWorkbook(name string, rid int) { func (f *File) workbookRelsReader() *xlsxWorkbookRels { if f.WorkBookRels == nil { var content xlsxWorkbookRels - _ = xml.Unmarshal([]byte(f.readXML("xl/_rels/workbook.xml.rels")), &content) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML("xl/_rels/workbook.xml.rels")), &content) f.WorkBookRels = &content } return f.WorkBookRels @@ -267,7 +267,7 @@ func (f *File) GetActiveSheetIndex() int { buffer.WriteString("xl/worksheets/sheet") buffer.WriteString(strings.TrimPrefix(v.ID, "rId")) buffer.WriteString(".xml") - _ = xml.Unmarshal([]byte(f.readXML(buffer.String())), &xlsx) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML(buffer.String())), &xlsx) for _, sheetView := range xlsx.SheetViews.SheetView { if sheetView.TabSelected { ID, _ := strconv.Atoi(strings.TrimPrefix(v.ID, "rId")) diff --git a/styles.go b/styles.go index 513fc9b3..f923787f 100644 --- a/styles.go +++ b/styles.go @@ -999,7 +999,7 @@ func is12HourTime(format string) bool { func (f *File) stylesReader() *xlsxStyleSheet { if f.Styles == nil { var styleSheet xlsxStyleSheet - _ = xml.Unmarshal([]byte(f.readXML("xl/styles.xml")), &styleSheet) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML("xl/styles.xml")), &styleSheet) f.Styles = &styleSheet } return f.Styles @@ -2757,7 +2757,7 @@ func getPaletteColor(color string) string { // structure after deserialization. func (f *File) themeReader() *xlsxTheme { var theme xlsxTheme - _ = xml.Unmarshal([]byte(f.readXML("xl/theme/theme1.xml")), &theme) + _ = xml.Unmarshal(namespaceStrictToTransitional(f.readXML("xl/theme/theme1.xml")), &theme) return &theme } diff --git a/test/Book1.xlsx b/test/Book1.xlsx index 84c43d15f284fcd570060fecc9c55cea5c1a9852..7d9886ef6720ebe744d11a2c4a1ac239f64fb87a 100755 GIT binary patch literal 33070 zcmeFYV|-;>_B9;atk^axcEz@Br()Z-QL$~KV%xS+vGe5K>f8NCcR$bj_5JleIXipq zz0QX-);x2LHRhVK62KrR01%(A|9K#P-f*#`b1*fsGWvaHpmnjbJX2e@US&h;)Y0Aa z-RdAx^KSGf52RT=w~lW#ow>NbR?Q`0K{1PQK*}SpmZ|OrTJPV0p?9`tUjbvL$U z;juH_$hv;<2y`JoAEG{!)BgH3@)Q!A@x3A}DrLB?IYPCGyk=Oa z?NJUIl_8YYH}Em+T2M1H-XanaxPXZCn`JVdB@UjN1ySL{(!$xmzKK~AvnXxGjC5gq zL(buo_LR~xoVLNj>45NJh z8%W?v0+I|<#WiH~fG=a(vMWQU6p;n8`lZv*VPJfb6zoOFRxECO_PW*dh+LD|vFWpi zruZqtZ!wxIvE2%~q{#taXI$_OFztv8hSYFefjF3Axip5FW4{-WTqV%^3PZ|`7~ZJT zVmjafVvMb~&Gx#W^4bb(;g0LbcNTbR(g;qWq z=(OW467*iF^%9;P1Fv??A=fxYV4H-6S2BS@s)h432Lt}u>E=IiuxxSOX<1Mz-A$Ldks(N<8XsVR zKW%FxoNKj-8lL4V)bvJxrd&Z8VF$tmTXU%t5fkPcn_sM8)Kz+ssp6)?nBMCI(|hX5 zDsc@V3xu!(Aaj_ywH)=G8YvqT=c?jZgp-BygQE83T3HJ!6|mwL0rG1$YhpFuGLPz-Cg4QG=jaQJpR&%YYmsqWxdn|!S^+n0?uL`S8&THGg*=V#&@vMjb?lUw_{^x2I z^Am|i7KfPuDec5HxN#I?smdfub`>OoW!~{rB;@WYCw3LnnllJpwQrs1>|S%VZSTeV zEm`X)&z?>551vij*Q@v6x7r5=ML0%Ry-?j@*p0&Xsgi5G4;v&pIgIi82%7|5;Tpwv zuNx#*mp@iOr-}QjfK1lx-TkxY?O%42Sg{>6I>^7&2l3BgLt`bYi*o z6t6<9$jw~?wPkOfH*jR_-gZcLab7=HCAW|+y4|&j+YFyRHhl*Dj}KW1aEKdOj+Q-8 z0Du5Y007xPlf?f_5P#TEpYK1Cgr2^okv-k-asMotK!1+Yu`{x?r=$Jj95K@)4$Oc6 zw$--98PMWfSAkDBeorW1LwE`tF??pdM2s9)e7p+nXIjwc{_%8}uGiRhlIc>EKm!hX zS_sO|Ust22cs0XYdBL~m*OR@=2L+d)x2UCK^atVl=3rF;}F4N18Yh-YHM8zwngxknXwsL_rehFFgMlPDH=)bhfdxus1a_ar@7%8#Z^4&40kY$bl z{LZho*C)@iyRA%@yabwH%)(kAetvrk|B`K2Z{8Nr*l?%{JM7}1SjO`7^m$}E5#o4>1Q|;6K(l7RX?2B5jbHPvI6-Sv zhGm~h4@q)s3Ql$MjiYab8X%2Co(XL6$l7*~6a_Gu*KrJT#%WpXs9 z^jL+(CxUjH4r4V+^_Wn^`PogCT}HY*jPLD*#c$`-0~e^iF+E`pzZN_&xo4Wcr<=d) zl-8xDM}NZf+fA8(E#JWa0RR&J4(sQm|8@M$O$|)->^>p=*KUgU`N>ar{@b|U(En-t z1N!o*8u3ATgu!20S2#bpC0zO6JR)9TMp|FVAc*miEQ zrYMCk$0pY>bp(d0E27xz|GE0;@c$(epteazwa z2{7aKSHUZdCi9Q;O0J3AgvHbIp#4C2CPhssJ+E5l?|ILHu_w{>yk4*KEJYYElb_%9 zH->J&Pb_~}(VsZ}Yiv+{V`F7xXr@PJW~FCh#6WBQ-N+Wv%jOg_dOz6sGjf~70EogHll6i8t>U+0e)eDSmTMq zY(5~2?(2lLbBNw?&$zJW*>l}tF#{yn@-W2rylSapWri2yS608Q0>G-XBK)3{WXB#j zde*Mm31ty`+o~ntXIVI=)0K0MGUzn%i&nMdM_}~EHI3@RIg(z$oCVnB!^tRCU;IrR z*)Q648$jEIfS|*|V5Z#Uu;FMRiMZ${)z)C^3su+Jj+*<-epodLotcHI6D}(=qsx_p z*Kw5DJ%ujytLVne;AT7!eVgG2=s{fjt;5he$VLIq=h{UW|(fzPl*r29mX5PV9Nye zym-*d{;_T4mU32S1Kb@jwMflBrW+jI?(>ahQS}dncGwO9YEuD<&)w7e+T1hv_P;s?7I`rEDYc3D-CZBXmv5Z-D*=x!xsD(DuQ|z#*yI8K5=6jr zfu*_K?V1TG{$y&!L75b$WRhnL- z^oC3XJnoX()*ffz_V$tWHts*h9c;Xw=h7TF*8#nK7Q9%+A8!N^9|AA%?$TeKH#zv2 zPfYfmX_O?p#LZgrAeU0^$6gAhZqEoB7g(cA#Ot);m7dbmCzD_Ze~2zlKrT}AC_2ZZ zy**$HPFxt)Ft^6p7bZ{JaJ2(_>=cAmwY-x1he@*^PtEzqOMo_y1IikCxpj{10|;3rnQ5!oPw5cM00?#t%VB#Cl0Um=*LU+ zxIWSK{Adq9COR^8(Vms@?5S98b&9o2FF*6!^p2k%tISYx9@s`?tGa&BF*v$+fVdCj)NmHDlh8m4x5Iw7e)= zk+i-6C!{a4ha}bPVhyC4)^PYgzq&=;bh>x_aLjYFKL%$r&4FYjL8=CT#&6zk|4ub) zP$xloqLVhvQ7F;nzDb62T4Za=LXfaIMx?@Jn)jM)j_v`DGM9qgWWS_1>#joHp2a3H@Uk&q807 z0JP=lcGR=CK5np9>N*ScgJS#QnABI2oA@RV9TQH@U(?18$s#wC1>&{UM`$X4gwY! zsF0+1lWDqo%$Out@0l*y@!qE=2OxnvqSTjSlqvU_S+up4N4qxXhQ!i&D5jvxA4!7S zG%t*`Wf!n1&)EI<^p2S=MJB(uRrX|048`jO&{uU)H81HsdqlExeURfvM^8Xxr(E|V zb6Er_Nj=I%Ydw(dxyuVw4O8sA^;qd{Zl_Zuu{2cHns9K!uO~>oUh}mrZ7fZ4U@fo> z7pJDXQK+$VXFUh!R_eN!%&S`Z@?^!{`E^I#4dgH>7Nz~MEpZs3b5YnP+;{GwnIB;GHoj&$t8S| z!No{Lan&v06%Xov9>2N&BFck!n6;bp9&+w&^K#*G(t+P~xhPOv^y65`J>4O0Cu_n< z@!;m$$+i1l{ZBUB+2RqHdpAtL4z{_&P4(FxHK=BJv)ed?gZ8?guhFf9$)xeu%J;!) z=2rakkHTLE<97FlZMYl1JWuJLkERZ{KM;n>0iVbUGdkA1So*~OATZ`j8lCK4DT;W$ z$A)c|q+BOxLztTd2!OCo8D@ZL8e#Zu{Iq`%z9%due$nzSM27wqs^cn~h2Lr~y+3Vz zXS|{bvlYSC>6pc-SLztN)?>ShR&tYt6Z{X@&k)biM$OL8BG7LjFIHpuZ8se^A3SH68oaX2cIl>Vpjq7O}S)8mVF|4W6RZks31bi$YKTZjw+; z5ElUQ(WhG+9{{0|!n}jZMKL!zhU%AI{hE)G_9t7FT3u*)xgKPcAHw7S(t_fyS=lmp zHqx}R*~|wN#(v-YviNfF&~1h?P*hJG10g}$;%vW?K~mON9_ST|0+J{fF)Bj>%|?_fmFlf8+f@!b@+|%5y?$9Qtg)s4us?$!c*o!c;5PJuDey2g z^E?bDCvT{_#%>smXwZ*mFWLDH&GsI9T5EEH95u!bqJS(QH88=dgjlrac*9EP$bd-E z9~VaWfsHdtLe|BKZh?uNgGglL!ldlC>u81peFlC$4C)l6m~MVh1iX1$ayyj#CySU8 ze1He}2#oxK5?yNMW`SQvC_7jhYtu*GXN%(n?zgqUPVD`5>c|Cp25@tgTR8YNztbO+ z9|NbXuT;uj0n89z4&nAdefe5~NkF6kDXd_C*2a(nAVG@df1+i{P)=(jv@$hOD2L)I zbb3uYiuv4J5RAhzXc4ZJ4kTi^DUvPye3SGgA-6D z(mkR=QrhW;p&kvkBfM8ybz40=+SnczhB^N&yEJ7g8R?22z`9!V8DL%4RVwp1ME63M zR!B=u2Lqxk5e%|q*Sf|-9g6fh(RU1Wi7)@SQU;w7beZf}D_-jw*w8qUW&zX(_iaCT zAHK#_@8D5F66$3}oK9%GVN~;j4`<3@F#t5x23-Z|Q=8jVXHse%j!~9u?qae`{0=un z(g??zdILS*-`b6uQbw&%kzkF+Pojtw^0w3)0I)a?8R&@RZOeQCsvFF(!o++xnJxvk z%c!D7Bl-GnlGZmJLy8kb`5kKVNN1{_petMQVPd)5-biJ5dbBk|r@d5s$rd?}t6GgY zvl*P+4d_FBTN^RoL;O`*n-iC*gp{T+=1 z-hEUVNF<%U0i+e{#7gbxvIBcB&M0PQYk5O+POGa%-u=#yFpIq>^|SxW(i0yZmS?-!%2#aFegFJHVb8cX9JeBquRc z?u>hNrFb9U0y85BRN{;6O8rg(LxRpjLqq7XsyHXPqe4p72P2mtQnMs!Jc?*J9f5fdAof$L9p0Yb82Cq zyp3>ed9?PAy>2@`jWsL|G%RW@Ubk9mt$G|%3qgf9b@S^R>$#syU*HK%o81;bq)6%j zMn=W%5$R%f0bLW&M-}zr;{pFV^7yisx24Y#@k@?AOB2T514VMM_X{4-t_f72R#l+8 zNbtm+9_Mi5@;fYgDYi=2lp^{$+o3e8PL9$y9t9&ZfSEx+U_V0!ugEE#ucv_p(q8di!BG{%lfu!RCH~K9o>;5~lZ_ zO`AEwUg=?uvh!;N#+g*!=GR3v?lb$?>9e}3<#n^8!(_vz&@cxz(4e8=W5cwH*vK7b zeIZvj!a26CQo+Vh?%fdHHgD)`PY+* zU`WdW1*y?S4o#mP=+X0wh0J{~E%(L#iZIpw$m$L#lvhuhFcX-+FcN^B$k0kb;G39j z*1h0c(y*ddWd^h4#*b~}PU!

md2+2u7)%IvjR5RP_i!f^`Dghpi{sTy!}T!Uv~L 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 diff --git a/xmlDrawing.go b/xmlDrawing.go index 6ba7d31d..7356cb59 100644 --- a/xmlDrawing.go +++ b/xmlDrawing.go @@ -13,24 +13,29 @@ import "encoding/xml" // Source relationship and namespace. const ( - SourceRelationship = "http://schemas.openxmlformats.org/officeDocument/2006/relationships" - SourceRelationshipChart = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart" - SourceRelationshipComments = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments" - SourceRelationshipImage = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" - SourceRelationshipTable = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table" - SourceRelationshipDrawingML = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing" - SourceRelationshipDrawingVML = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing" - SourceRelationshipHyperLink = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" - SourceRelationshipWorkSheet = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" - SourceRelationshipChart201506 = "http://schemas.microsoft.com/office/drawing/2015/06/chart" - SourceRelationshipChart20070802 = "http://schemas.microsoft.com/office/drawing/2007/8/2/chart" - SourceRelationshipChart2014 = "http://schemas.microsoft.com/office/drawing/2014/chart" - SourceRelationshipCompatibility = "http://schemas.openxmlformats.org/markup-compatibility/2006" - NameSpaceDrawingML = "http://schemas.openxmlformats.org/drawingml/2006/main" - NameSpaceDrawingMLChart = "http://schemas.openxmlformats.org/drawingml/2006/chart" - NameSpaceDrawingMLSpreadSheet = "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" - NameSpaceSpreadSheet = "http://schemas.openxmlformats.org/spreadsheetml/2006/main" - NameSpaceXML = "http://www.w3.org/XML/1998/namespace" + SourceRelationship = "http://schemas.openxmlformats.org/officeDocument/2006/relationships" + SourceRelationshipChart = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart" + SourceRelationshipComments = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments" + SourceRelationshipImage = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" + SourceRelationshipTable = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/table" + SourceRelationshipDrawingML = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing" + SourceRelationshipDrawingVML = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing" + SourceRelationshipHyperLink = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink" + SourceRelationshipWorkSheet = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" + SourceRelationshipChart201506 = "http://schemas.microsoft.com/office/drawing/2015/06/chart" + SourceRelationshipChart20070802 = "http://schemas.microsoft.com/office/drawing/2007/8/2/chart" + SourceRelationshipChart2014 = "http://schemas.microsoft.com/office/drawing/2014/chart" + SourceRelationshipCompatibility = "http://schemas.openxmlformats.org/markup-compatibility/2006" + NameSpaceDrawingML = "http://schemas.openxmlformats.org/drawingml/2006/main" + NameSpaceDrawingMLChart = "http://schemas.openxmlformats.org/drawingml/2006/chart" + NameSpaceDrawingMLSpreadSheet = "http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" + NameSpaceSpreadSheet = "http://schemas.openxmlformats.org/spreadsheetml/2006/main" + NameSpaceXML = "http://www.w3.org/XML/1998/namespace" + StrictSourceRelationship = "http://purl.oclc.org/ooxml/officeDocument/relationships" + StrictSourceRelationshipChart = "http://purl.oclc.org/ooxml/officeDocument/relationships/chart" + StrictSourceRelationshipComments = "http://purl.oclc.org/ooxml/officeDocument/relationships/comments" + StrictSourceRelationshipImage = "http://purl.oclc.org/ooxml/officeDocument/relationships/image" + StrictNameSpaceSpreadSheet = "http://purl.oclc.org/ooxml/spreadsheetml/main" ) var supportImageTypes = map[string]string{".gif": ".gif", ".jpg": ".jpeg", ".jpeg": ".jpeg", ".png": ".png"}