我已将XlsxReaderWritter Framework添加到我的应用中。我在使用这个框架的第一步时遇到了麻烦,即在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文件。它似乎没有返回[Any]!这是身体:
- (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)
如果您使用的是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"
答案 1 :(得分:0)
您应该注意可选的结果:
var firstWorksheet: BRAWorksheet? = spreadsheet.workbook.worksheets?[0]