我在使用CHCSVwriter
将数组导出为CSV或Excel文件时遇到问题。
我有几个Arrays
位于Persian language
(它已本地化,且必须为UTF-8,至少在Windows中)。
使用CHCSVWriter(thanks, Dave)我可以将我的数组导出为CSV文件但不是默认设置。
由于我的数组编码(UTF8不起作用,我不知道为什么!!)但是更改CHCSVwriter.m我可以用我的本地化语言编写文件。
我有一个奇怪的问题:
1-如果我使用NSUTF8StringEncoding
,那么我有一个标准的逗号分隔的CSV文件,能够用Excel正确地打开列正确的列分离但是表格单元格是未知的编码(我使用的是波斯语)
2-如果我使用NSUTF16StringEncoding
,那么我有一个CSV文件,每行的整列写入一列!但语言和编码是对的!奇怪的是,excel无法检测到逗号,它打开一个只有一列的表,每行包含整列,我设计用逗号分隔整列!
另外,我还有另一个问题,我找不到为CHCSVWriter设置编码的方法,我必须从CHCSVWriter.m文件手动更改它!
CHCSVWriter.m的一部分:
- (void)_writeString:(NSString *)string {
// if (encoding == 0) {
// encoding = NSUTF8StringEncoding;
encoding = NSUTF16StringEncoding;
//}
我的部分代码:
NSString * tempFileName = [NSString stringWithFormat:@"sellExport.csv"];
NSString * tempFile =[NSHomeDirectory() stringByAppendingPathComponent:tempFileName];
NSLog(@"Writing to file: %@", tempFile);
error = nil;
CHCSVWriter *sellExporting = [[CHCSVWriter alloc] initWithCSVFile:tempFile atomic:NO];
[sellExporting writeLine];
for (int i = 0; i<=[purchaseCodes count] ; i++) {
[sellExporting writeLineOfFields:[purchaseCodes objectAtIndex:i],[purchaseDates objectAtIndex:i],[purchaseCarBrands objectAtIndex:i],[purchaseCarSystems objectAtIndex:i],[purchaseCarModels objectAtIndex:i],[purchaseCarColors objectAtIndex:i],[purchaseCarChassis objectAtIndex:i],[purchaseCustomerNames objectAtIndex:i],[purchaseSharedNames objectAtIndex:i],[purchaseTotals objectAtIndex:i],[sellCodes objectAtIndex:i],[sellCustomerNames objectAtIndex:i],[sellDates objectAtIndex:i],[sellTotals objectAtIndex:i],[sellProfits objectAtIndex:i],[sellShareProfits objectAtIndex:i],nil];
}
[sellExporting closeFile];
[sellExporting release];
答案 0 :(得分:1)
由于没人能解决我的问题,
我发现 Microsoft Excell (mac)不支持 Unicode编码。
另一方面,由于这个事实,我使用 Perisan 语言进行数据输入,所以我必须使用NSUTF16StringEncoding
(为什么UTF8StringEncoding
不起作用?我不喜欢不知道!)当我打开.csv文件时,我的所有数据只有一列(我有16列)而 Microsoft Excell 无法检测逗号 (,)作为分隔分隔符!!!
无论如何,现在,我可以使用 NeoOffice 或 OpenOffice 打开 UTF16 编码 CSV 文件很好地支持Unicode .csv文件没有任何问题!
所以,这完全是关于 Microsft 而不是 Dave deLong 的CHCSVWriter。 (再次感谢Dave)
这是我自己解决的第五个问题!!!
无论如何,谢谢大家。