如何在iOS的Excel文件中添加图像

时间:2019-07-13 06:50:11

标签: ios objective-c excel

在使用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

1 个答案:

答案 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
    }
}