github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/encoding/kmgExcel/XlsxWriter.go (about) 1 package kmgExcel 2 3 import ( 4 "archive/zip" 5 "bytes" 6 "encoding/xml" 7 "fmt" 8 "io" 9 "os" 10 "strconv" 11 "text/template" 12 ) 13 14 func Array2XlsxByte(data [][]string) (b []byte, err error) { 15 fileBuf := &bytes.Buffer{} 16 err = Array2XlsxIo(data, fileBuf) 17 if err != nil { 18 return nil, err 19 } 20 return fileBuf.Bytes(), nil 21 } 22 23 //write raw data into xlsx file 24 //data key means: rowIndex,columnIndex,value 25 func Array2XlsxFile(data [][]string, path string) (err error) { 26 f, err := os.Create(path) 27 if err != nil { 28 return 29 } 30 defer f.Close() 31 err = Array2XlsxIo(data, f) 32 if err != nil { 33 return 34 } 35 return 36 } 37 38 //write raw data into a io.Writer 39 //data key means: rowIndex,columnIndex,value 40 //Array2XlsxIo can be used to write xlsx file in memory without touch filesystem. 41 func Array2XlsxIo(data [][]string, w io.Writer) (err error) { 42 zw := zip.NewWriter(w) 43 defer zw.Close() 44 45 // sharedStrings 46 err = array2XlsxWriteSharedStrings(zw, data) 47 if err != nil { 48 return 49 } 50 // sheel1 51 err = array2XlsxWriteSheet1(zw, data) 52 if err != nil { 53 return 54 } 55 56 for filename, content := range fixedFileContent { 57 thisW, err := zw.Create(filename) 58 if err != nil { 59 return err 60 } 61 _, err = thisW.Write(content) 62 if err != nil { 63 return err 64 } 65 } 66 67 return 68 } 69 func array2XlsxWriteSharedStrings(zw *zip.Writer, data [][]string) (err error) { 70 siList := []xlsxSharedStringSi{{""}} 71 for _, row := range data { 72 for _, v1 := range row { 73 if v1 == "" { //ignore blank cell can save space 74 continue 75 } 76 siList = append(siList, xlsxSharedStringSi{v1}) 77 } 78 } 79 sst := xlsxSharedStringSst{ 80 Xmlns: xmlNs, 81 Count: len(siList), 82 SiList: siList, 83 } 84 thisW, err := zw.Create(sharedStringsFileName) 85 _, err = thisW.Write([]byte(xml.Header)) 86 if err != nil { 87 return 88 } 89 encoder := xml.NewEncoder(thisW) 90 err = encoder.Encode(sst) 91 if err != nil { 92 return 93 } 94 return 95 } 96 97 func array2XlsxWriteSheet1(zw *zip.Writer, data [][]string) (err error) { 98 rowList := make([]xlsxRow, len(data)) 99 totalIndex := 1 100 MaxCellIndex := 0 101 for rowIndex, row := range data { 102 rowList[rowIndex].C = make([]xlsxC, len(row)) 103 if len(row) > MaxCellIndex { 104 MaxCellIndex = len(row) - 1 105 } 106 for cellIndex, v1 := range row { 107 index := totalIndex 108 if v1 == "" { //ignore blank cell can save space 109 index = 0 110 } else { 111 totalIndex++ 112 } 113 rowList[rowIndex].C[cellIndex] = xlsxC{ 114 R: CoordinateXy2Excel(cellIndex, rowIndex), 115 T: "s", 116 V: index, 117 } 118 } 119 } 120 sheetData := xlsxSheetData{ 121 Row: rowList, 122 } 123 thisW, err := zw.Create(sheel1FileName) 124 xmlBytes, err := xml.Marshal(sheetData) 125 if err != nil { 126 return 127 } 128 err = sheelTpl.Execute(thisW, struct { 129 MaxPosition string 130 SheetData string 131 }{ 132 MaxPosition: CoordinateXy2Excel(MaxCellIndex, len(data)-1), 133 SheetData: string(xmlBytes), 134 }) 135 if err != nil { 136 return 137 } 138 return 139 } 140 141 //坐标系变换,从xy坐标系变化成excel的字符坐标系 142 //xy坐标从(0,0)开始,excel坐标从A1开始 143 func CoordinateXy2Excel(collomnIndex int, rowIndex int) (output string) { 144 if collomnIndex < 0 || rowIndex < 0 { 145 panic(fmt.Errorf("[CoordinateXy2Excel] collomnIndex[%d]<0||y[%d]<0", collomnIndex, rowIndex)) 146 } 147 for { 148 output = string(collomnIndex%26+int('A')) + output 149 collomnIndex = collomnIndex/26 - 1 150 if collomnIndex < 0 { 151 break 152 } 153 } 154 /* 155 for reference,通过下面的代码推导出上面的循环代码 156 if ((x/26-1)/26-1)>=0{ 157 output+=string((x/26-1)/26-1+int('A'))+string((x/26-1)%26+int('A'))+string(x%26+int('A')) 158 }else if (x/26-1)>=0{ 159 output+=string(x/26-1+int('A'))+string(x%26+int('A')) 160 }else{ 161 output+=string(x+int('A')) 162 } 163 */ 164 output += strconv.Itoa(rowIndex + 1) 165 return output 166 } 167 168 //file content from wps xlsx file. 169 var fixedFileContent = map[string][]byte{ 170 "[Content_Types].xml": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 171 <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default ContentType="application/vnd.openxmlformats-package.relationships+xml" Extension="rels"/><Default ContentType="application/xml" Extension="xml"/><Override ContentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" PartName="/docProps/app.xml"/><Override ContentType="application/vnd.openxmlformats-package.core-properties+xml" PartName="/docProps/core.xml"/><Override ContentType="application/vnd.openxmlformats-officedocument.custom-properties+xml" PartName="/docProps/custom.xml"/><Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml" PartName="/xl/sharedStrings.xml"/><Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml" PartName="/xl/styles.xml"/><Override ContentType="application/vnd.openxmlformats-officedocument.theme+xml" PartName="/xl/theme/theme1.xml"/><Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml" PartName="/xl/workbook.xml"/><Override ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml" PartName="/xl/worksheets/sheet1.xml"/></Types>`), 172 "_rels/.rels": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 173 <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="xl/workbook.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties" Target="docProps/custom.xml"/></Relationships>`), 174 "docProps/app.xml": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 175 <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Application>WPS Office 个人版</Application><HeadingPairs><vt:vector size="2" baseType="variant"><vt:variant><vt:lpstr>工作表</vt:lpstr></vt:variant><vt:variant><vt:i4>1</vt:i4></vt:variant></vt:vector></HeadingPairs><TitlesOfParts><vt:vector size="1" baseType="lpstr"><vt:lpstr>1</vt:lpstr></vt:vector></TitlesOfParts></Properties>`), 176 "docProps/core.xml": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 177 <cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:creator>Administrator</dc:creator><dcterms:created xsi:type="dcterms:W3CDTF">2014-04-01T19:29:42Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2014-04-01T19:29:50Z</dcterms:modified></cp:coreProperties>`), 178 "docProps/custom.xml": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 179 <Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><property fmtid="{D5CDD505-2E9C-101B-9397-08002B2CF9AE}" pid="2" name="KSOProductBuildVer"><vt:lpwstr>2052-9.1.0.4468</vt:lpwstr></property></Properties>`), 180 "xl/_rels/workbook.xml.rels": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 181 <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Target="worksheets/sheet1.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Target="sharedStrings.xml"/></Relationships>`), 182 "xl/theme/theme1.xml": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 183 <a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office 主题"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink><a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Deva" typeface="Mangal"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Geor" typeface="Sylfaen"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Guru" typeface="Raavi"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Taml" typeface="Latha"/><a:font script="Telu" typeface="Gautami"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Arab" typeface="Arial"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Deva" typeface="Mangal"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Geor" typeface="Sylfaen"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Guru" typeface="Raavi"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="宋体"/><a:font script="Hant" typeface="新細明體"/><a:font script="Hebr" typeface="Arial"/><a:font script="Jpan" typeface="MS Pゴシック"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Taml" typeface="Latha"/><a:font script="Telu" typeface="Gautami"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Viet" typeface="Arial"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:shade val="51000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="80000"><a:schemeClr val="phClr"><a:shade val="93000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="94000"/><a:satMod val="135000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:satMod val="350000"/><a:shade val="99000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr><a:xfrm><a:off x="0" y="0"/><a:ext cx="0" cy="0"/></a:xfrm><a:custGeom><a:avLst/><a:gdLst><a:gd name="_h" fmla="val 21600"/><a:gd name="_w" fmla="val 21600"/></a:gdLst><a:ahLst/><a:cxnLst/><a:pathLst><a:path w="21600" h="21600"/></a:pathLst></a:custGeom><a:gradFill rotWithShape="0"><a:gsLst><a:gs pos="100000"><a:srgbClr val="9CBEE0"/></a:gs><a:gs pos="0"><a:srgbClr val="BBD5F0"/></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill><a:ln w="15875" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:srgbClr val="739CC3"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="200000"/></a:ln></a:spPr><a:bodyPr/><a:lstStyle/></a:spDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>`), 184 "xl/styles.xml": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 185 <styleSheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><numFmts count="4"><numFmt numFmtId="43" formatCode="_ * #,##0.00_ ;_ * \-#,##0.00_ ;_ * "-"??_ ;_ @_ "/><numFmt numFmtId="44" formatCode="_ "¥"* #,##0.00_ ;_ "¥"* \-#,##0.00_ ;_ "¥"* "-"??_ ;_ @_ "/><numFmt numFmtId="41" formatCode="_ * #,##0_ ;_ * \-#,##0_ ;_ * "-"_ ;_ @_ "/><numFmt numFmtId="42" formatCode="_ "¥"* #,##0_ ;_ "¥"* \-#,##0_ ;_ "¥"* "-"_ ;_ @_ "/></numFmts><fonts count="1"><font><sz val="12"/><name val="宋体"/><charset val="134"/></font></fonts><fills count="2"><fill><patternFill patternType="none"/></fill><fill><patternFill patternType="gray125"/></fill></fills><borders count="1"><border><left/><right/><top/><bottom/><diagonal/></border></borders><cellStyleXfs count="6"><xf numFmtId="0" fontId="0" fillId="0" borderId="0"><alignment vertical="center"/></xf><xf numFmtId="43" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="44" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="41" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="9" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf><xf numFmtId="42" fontId="0" fillId="0" borderId="0" applyFont="0" applyFill="0" applyBorder="0" applyAlignment="0" applyProtection="0"><alignment vertical="center"/></xf></cellStyleXfs><cellXfs count="1"><xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"><alignment vertical="center"/></xf></cellXfs><cellStyles count="6"><cellStyle name="常规" xfId="0" builtinId="0"/><cellStyle name="千位分隔" xfId="1" builtinId="3"/><cellStyle name="货币" xfId="2" builtinId="4"/><cellStyle name="千位分隔[0]" xfId="3" builtinId="6"/><cellStyle name="百分比" xfId="4" builtinId="5"/><cellStyle name="货币[0]" xfId="5" builtinId="7"/></cellStyles></styleSheet>`), 186 "xl/workbook.xml": []byte(`<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 187 <workbook xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"><fileVersion appName="xl" lastEdited="3" lowestEdited="5" rupBuild="9302"/><workbookPr/><bookViews><workbookView windowWidth="13400" windowHeight="14160"/></bookViews><sheets><sheet name="1" sheetId="1" r:id="rId1"/></sheets><calcPr calcId="144525"/></workbook>`), 188 } 189 190 const sheel1FileName = "xl/worksheets/sheet1.xml" 191 const sharedStringsFileName = "xl/sharedStrings.xml" 192 193 var sheelTpl = template.Must(template.New("main").Parse(`<?xml version="1.0" encoding="UTF-8"?> 194 <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" 195 xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 196 xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" 197 xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" 198 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"> 199 <dimension ref="A1:{{.MaxPosition}}"/> 200 {{.SheetData}} 201 </worksheet> 202 `)) 203 204 type xlsxSharedStringSst struct { 205 XMLName xml.Name `xml:"sst"` 206 Xmlns string `xml:"xmlns,attr"` 207 Count int `xml:"count,attr"` 208 SiList []xlsxSharedStringSi `xml:"si"` 209 } 210 type xlsxSharedStringSi struct { 211 T string `xml:"t"` 212 } 213 type xlsxSheetData struct { 214 XMLName xml.Name `xml:"sheetData"` 215 Row []xlsxRow `xml:"row"` 216 } 217 type xlsxRow struct { 218 C []xlsxC `xml:"c"` 219 } 220 type xlsxC struct { 221 R string `xml:"r,attr"` 222 T string `xml:"t,attr"` 223 V int `xml:"v"` 224 } 225 226 const xmlNs = "http://schemas.openxmlformats.org/spreadsheetml/2006/main" 227 228 /* 229 for reference of contents of wps xlsx files which dynamically generated from this program 230 sharedStrings.xml 231 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 232 <sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="2"> 233 <si><t>中文</t></si> 234 <si><t>哈哈</t></si> 235 </sst> 236 237 sheet1.xml 238 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 239 <worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" 240 xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" 241 xmlns:xdr="http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing" 242 xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main" 243 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"> 244 <dimension ref="A1:C1492"/> 245 <sheetData> 246 <row> 247 <c r="A1" t="s"><v>0</v></c> 248 <c r="B1"><v>1</v></c> 249 </row> 250 <row r="2"> 251 <c r="A2"><v>2</v></c> 252 <c r="B2"><v>3</v></c> 253 <c r="C2" t="s"><v>1</v></c> 254 </row> 255 </sheetData> 256 </worksheet> 257 */