objective-c – 在Apple Swift中解析Excel数据

前端之家收集整理的这篇文章主要介绍了objective-c – 在Apple Swift中解析Excel数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前的工作流程涉及使用Applescript基本上划分Excel数据并将其格式化为纯文本文件.我们正在推动所有 Swift环境,但我还没有找到任何用于将我的Excel数据解析为Swift的工具包.

我唯一能想到的是使用C或其他东西并包装它,但这并不理想.解析这些数据以便在Swift中使用的任何更好的建议?

目标是消除Applescript,但我不确定在与Excel文件交互时是否可行.通过Applescript编写Excel脚本似乎是唯一的方法.

编辑:我没有从这个工作流程中删除Excel的选项.这就是数据将如何进入应用程序,因此我必须包含它.

能够简化解析这些数据的过程然后处理它将是至关重要的.我知道Applescript过去一直很好,帮助我处理它;然而,它对我来说有点过于封闭.

我一直在寻找在Swift / Cocoa中编写的东西,但是仍然可能需要用Applescript提取数据,对吧?

推动Swift的一大优点是可读性.我不太了解Objective-C,而且我觉得swift会更容易过渡.

我在PC上的工作流程一直在使用COM对象,如前所述,在Mac Excel应用程序中不可用.我此刻只是在寻找数据提取.一些以前的应用程序在应用程序中进行了处理,但我希望使其非常独立,因此我正在开发的应用程序中的所有处理.一旦从.XLS或.XLSX文件提取数据,我将通过RegEx进行一些文本编辑,也许还有一些数字运算.没什么太疯狂的.截至目前,它将在客户端运行,但我希望将其扩展到服务器进程.

解决方法

在Mac OS X 10.6中,Snow Leopard Apple推出了AppleScriptObjC框架,使Cocoa和AppleScript之间的交互变得非常容易. AppleScript代码和类似Objective-C的语法可以在同一个源文件中使用.它比Scripting Bridge和NSAppleScript更方便.

AppleScriptObjC不能直接在Swift中使用,因为NSBundle的命令loadAppleScriptObjectiveCScripts没有桥接到Swift.

但是,您可以使用Objective-C桥类

ASObjC.h

@import Foundation;
@import AppleScriptObjC;

@interface NSObject (Excel)
- (void)openExcelDocument:(NSString *)filePath;
- (NSArray *)valueOfUsedRange;

@end

@interface ASObjC : NSObject

+ (ASObjC *)sharedASObjC;

@property id Excel;

@end

ASObjC.m

#import "ASObjC.h"

@implementation ASObjC

+ (void)initialize
{
    if (self == [ASObjC class]) {
        [[NSBundle mainBundle] loadAppleScriptObjectiveCScripts];
    }
}

+ (ASObjC *)sharedASObjC
{
    static id sharedInstance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken,^{
        sharedInstance = [[ASObjC alloc] init];
    });

    return sharedInstance;
}

- (instancetype)init
{
    self = [super init];
    if (self) {
        _Excel = NSClassFromString(@"ASExcel");
    }
    return self;
}

@end

从AppleScriptObjC模板创建AppleScript源文件

ASExcel.applescript

script ASExcel
  property parent: class "NSObject"

  on openExcelDocument:filePath
    set asFilePath to filePath as text
    tell application "Microsoft Excel"
      set sourceBook to open workbook workbook file name asFilePath
      repeat
        try
          get workbooks
          return
        end try
        delay 0.5
      end repeat
    end tell
  end openDocument

  on valueOfUsedRange()
    tell application "Microsoft Excel"
      tell active sheet
        set activeRange to used range
        return value of activeRange
      end tell
    end tell
  end valueOfUsedRange

end script

如有必要,链接到AppleScriptObjC框架.
创建桥接头并导入ASObjC.h

然后你可以用Swift调用AppleScriptObjC

ASObjC.sharedASObjC().Excel.openExcelDocument("Macintosh HD:Users:MyUser:Path:To:ExcelFile.xlsx")

要么

let excelData = ASObjC.sharedASObjC().Excel.valueOfUsedRange() as! Array<[String]>
原文链接:https://www.f2er.com/c/119827.html

猜你在找的C&C++相关文章