// OpenFile() take the name of an XLSX file and returns a populated // xlsx.File struct for it. func OpenFile(filename string) (x *File, e os.Error) { var f *zip.ReadCloser var error os.Error var file *File var v *zip.File var workbook *zip.File var sharedStrings *zip.File var reftable []string var worksheets map[string]*zip.File f, error = zip.OpenReader(filename) if error != nil { return nil, error } file = new(File) worksheets = make(map[string]*zip.File, len(f.File)) for _, v = range f.File { switch v.Name { case "xl/sharedStrings.xml": sharedStrings = v case "xl/workbook.xml": workbook = v default: if len(v.Name) > 12 { if v.Name[0:13] == "xl/worksheets" { worksheets[v.Name[14:len(v.Name)-4]] = v } } } } file.worksheets = worksheets reftable, error = readSharedStringsFromZipFile(sharedStrings) if error != nil { return nil, error } if reftable == nil { error := new(XLSXReaderError) error.Error = "No valid sharedStrings.xml found in XLSX file" return nil, error } file.referenceTable = reftable sheets, error := readSheetsFromZipFile(workbook, file) if error != nil { return nil, error } if sheets == nil { error := new(XLSXReaderError) error.Error = "No sheets found in XLSX File" return nil, error } file.Sheets = sheets f.Close() return file, nil }