当前位置: 首页 > 面试题库 >

在Apple Swift中解析Excel数据

戚育
2023-03-14
问题内容

我当前的工作流程涉及使用Applescript本质上界定Excel数据并将其格式化为纯文本文件。我们正在向全Swift环境推进,但是我还没有找到任何将我的Excel数据解析为Swift的工具包。

我唯一想到的就是使用C或其他东西并将其包装,但这并不理想。关于解析此数据以在Swift中使用的任何更好的建议?

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

编辑: 我没有选择从此工作流程中删除Excel。这就是数据将如何到达应用程序的方式,因此我必须将其包括在内。

能够简化解析此数据然后对其进行处理的过程将至关重要。我知道Applescript过去在帮助我进行处理方面一直很出色。但是,对于我来说,它有点封闭。

我一直在寻找用Swift / Cocoa编写东西的方法,但这仍然可能需要使用Applescript提取数据,对吗?

推动Swift的一大优势是可读性。我不太了解Objective-C,因此我认为快速过渡是一个容易的过程。

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


问题答案:

在Mac OS X 10.6 Snow
Leopard中,Apple引入了AppleScriptObjC框架,该框架使可可和AppleScript之间的交互变得非常容易。可以在同一源文件中使用AppleScripthtml" target="_blank">代码和类似Objective-
C的语法。它比Scripting Bridge和更方便NSAppleScript

AppleScriptObjC无法直接在Swift中使用,因为loadAppleScriptObjectiveCScriptsNSBundle
的命令未桥接到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.apple脚本

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]>


 类似资料:
  • 问题内容: 我有与Excel VBA中相同的问题:解析的JSON对象循环,但是找不到任何解决方案。我的JSON具有嵌套对象,因此建议的解决方案(如VBJSON和vba-json)不适用于我。我还修复了其中之一,使其正常工作,但是由于doProcess函数的许多递归,结果是调用堆栈溢出。 最好的解决方案似乎是原始帖子中看到的jsonDecode函数。它非常快速且非常有效。我的对象结构全部位于类型JS

  • 此格式良好的XML文档使用MS VBA代码馈送到Excel 2007。我成功地使用DOMDocument和IXMLDOMElement导入了名称、城市和产品 但是,xa:MeContext id、vsData1 id、VsData2 id、客户id和订单id不会导出到Excel工作表。 每个Excel行都有以下标题,其中包含从XML文档填充的数据:

  • 问题内容: 我是Jquery,Ajax和JSON的新手。我在解析Json数据时遇到问题。我在Stackoverflow上遇到了很多问题 解析HTML表的JSON对象 访问/处理(嵌套的)对象,数组或JSON 在JavaScript中解析JSON? 如何在JQuery中解析此JSON对象? 还有很多… 我仍然无法解析Json数据。 我的Jquery看起来像: 我已经尝试了所有组合来解析此数据,但是j

  • 问题内容: 首先,我不再使用自定义JSON解析库,而是使用ScriptControl的Eval方法作为所有JSON代码的基础。另外,我们对本机Microsoft解决方案表示偏爱。 这是一个先前的问题,在Windows上的Excel VBA中,如何减轻IDE的大写行为破坏解析的JSON的点语法遍历的问题?这个问题基于此。它显示了与使用点语法遍历已解析的JSON对象相比,使用VBA.CallByNam

  • 问题内容: 我正在使用一个API,该API返回如下所示的JSON 在Swift中,我使用两个函数来获取并解析JSON 然后我用 可以很好地解析JSON。当我打印出 我得到了数组的所有内容。但是,我无法访问每个单独的索引。我很肯定这是一个数组,因为我之间 返回正确的长度。但是,如果我尝试通过使用访问单个索引 XCode关闭语法高亮显示并给我以下信息: 并且代码将无法编译。 这是XCode 6的错误,