2017-08-03 46 views
0

我已將XlsxReaderWritter框架添加到我的應用程序中。我有使用這個框架,這是在一個Excel得到一個工作表的第一步驟的麻煩文件奇怪的錯誤,返回的值類型與函數體中的不同

這裏是我的代碼:

let file = BRAOfficeDocumentPackage.open(syllabusFileURL.relativePath)! 
inputFile = file.workbook.worksheets[0] //this line does not compile and gives me this "Type [Any]! has no subscript members" 

好了,所以我投它,如下所示:

inputFile = file.workbook.worksheets[0] as! BRAWorksheet 

現在它編譯但我得到一個運行時錯誤說:

Could not cast value of type 'BRAWorksheet' (0x10df5fdc0) to 'BRAWorksheet' (0x10ce8e430). 

所以似乎值已經BRAWorksheet,不需要鑄造,但正如我所說,它不會編譯話說型[Any]!

在正式文件的,這裏是他們是如何得到一個工作表;

#####Swift 

//First worksheet in the workbook 
var firstWorksheet: BRAWorksheet = spreadsheet.workbook.worksheets[0] 

//Worksheet named "Foo" 
var fooWorksheet: BRAWorksheet = spreadsheet.workbook.createWorksheetNamed("Foo") 

由於它是一個導入的框架,我檢查了該函數的原始Objective-C文件。它似乎沒有返回[任何]!這裏是身體:

- (NSArray *)worksheets { 
    NSMutableArray *worksheets = @[].mutableCopy; 

    for (BRASheet *sheet in _sheets) { 
     BRAWorksheet *worksheet = [self.relationships relationshipWithId:sheet.identifier]; 
     worksheet.styles = _styles; 
     worksheet.sharedStrings = _sharedStrings; 
     worksheet.calcChain = _calcChain; 
     [worksheets addObject:worksheet]; 
    } 

    return worksheets.count ? worksheets : nil; 
} 

所以任何人都可以告訴我鴨子是怎麼回事?

+0

檢查您的導入庫,也許你有2個庫包含相同類型'BRAWorksheet' – wajeeh

+0

把inputFile行分成兩行怎麼樣?看看你有什麼'workbooks',以及什麼'工作表'? – dfd

+0

@wajeeh你是天賜之物。實際情況就是這樣。我已經導入XlsxReaderWriter作爲項目和通過可可豆莢。我刪除了xcodeproj,現在我可以投射它了。它仍然返回[Any]!雖然 – tdm3732

回答

0

你應該照顧可選結果:

var firstWorksheet: BRAWorksheet? = spreadsheet.workbook.worksheets?[0] 
2

如果您正在使用SWIFT 3

let path: String = Bundle.main.path(forResource: "demo", ofType: "xlsx")! 
let spreadsheet: BRAOfficeDocumentPackage = BRAOfficeDocumentPackage.open(path) 
let worksheet: BRAWorksheet = spreadsheet.workbook.worksheets[0] as! BRAWorksheet 
let sheet: BRASheet = spreadsheet.workbook.sheets[0] as! BRASheet 
print(sheet.name) // print "Sheet1" 
+0

問題是我不想投。如果我投了,我無法將更改保存到原始工作表中 – tdm3732