在使用Objective-C从iOS创建Excel文件时,它将为我带来完美的文本效果。但是,如果要在Excel文件中添加图像,它将在Excel单元格中给我<UIImage : some HexCode(width,height)>
。我希望整个图像显示在特定单元格的Excel文件中。
我的代码:
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
employeeInfoArray = [[NSMutableArray alloc]initWithCapacity:0];
for (int i = 0;i<10;i++)
{
NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:0];
[dict setValue:[NSString stringWithFormat:@"%d",i+1] forKey:@"EMPID"];
[dict setValue:[NSString stringWithFormat:@"EMP%d",i+1] forKey:@"EMPNAME"];
[dict setValue:[NSString stringWithFormat:@"DEPT%d",i+1] forKey:@"EMPDEP"];
[employeeInfoArray addObject:dict];
}
[self createCSV];
}
-(void)createCSV
{
NSMutableString *csvString = [[NSMutableString alloc]initWithCapacity:0];
[csvString appendString:@"ID NAME DEPARTMENT IMAGE \n\n"];
for (NSDictionary *dct in employeeInfoArray)
{
UIImage *image = [UIImage imageNamed:@"DemoImg.jpg"];
[csvString appendString:[NSString stringWithFormat:@"%@ %@ %@ %@ \n",[dct valueForKey:@"EMPID"],[dct valueForKey:@"EMPNAME"],[dct valueForKey:@"EMPDEP"],image ]];
}
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSLog(@"path: %@]",paths);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, @"EmployeeRecords.xls"];
[csvString writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
@end
答案 0 :(得分:1)
有一个选项。使用名为libxlsxwriter
的C库。可以在here中找到CocoaPod。 example有一个关于如何在Objective-C中使用此库的信息,但其中没有有关如何插入图像的示例。
关于如何使用swift插入图像,我做了example。您应该能够轻松地将代码转换为Objective-c:
import Foundation
import UIKit
import xlsxwriter
class Demo{
func generate() -> URL {
let documentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor:nil, create:false)
let fileURL = documentDirectory.appendingPathComponent("demo.xlsx")
//Create a new workbook.
//Ditch first 6 characters, because they are of the form file://
let workbook = workbook_new((fileURL.absoluteString.dropFirst(6) as NSString).fileSystemRepresentation)
let worksheet = workbook_add_worksheet(workbook, nil)
//Add a format.
let format = workbook_add_format(workbook)
//Insert an image
var imageBuffer = getArrayOfBytesFromImage(imageData: (UIImage(named: "logo")?.jpegData(compressionQuality: .greatestFiniteMagnitude)!)! as NSData)
worksheet_insert_image_buffer(worksheet, 1, 2, &imageBuffer, imageBuffer.count)
workbook_close(workbook)
return fileURL
}
func getArrayOfBytesFromImage(imageData:NSData) -> [UInt8]
{
//Determine array size
let count = imageData.length / MemoryLayout.size(ofValue: UInt8())
//Create an array of the appropriate size
var bytes = [UInt8](repeating: 0, count: count)
//Copy image data as bytes into the array
imageData.getBytes(&bytes, length:count * MemoryLayout.size(ofValue: UInt8()))
return bytes
}
}