直接从我自己的 iOS 应用程序打开 Microsoft Office 文档进行就地编辑
Open Microsoft Office document directly from my own iOS app for in-place editing
我希望能够就地 编辑托管在我自己的服务器上的 Office 文件。就地我的意思是在 Office 中打开文件,编辑它,然后将更改直接发送回我的 app/server。
我已通过实施 File Provider Extension 在文件应用程序 (iOS 11+) 中显示我的文件来部分实现这一点,它会自动启动 Office 应用程序并将更改恢复为上传到我的服务器。我还可以从 Office 的“打开”菜单浏览到我的文件并就地进行编辑。
我会直接从我的应用程序触发此流程。有什么想法吗?
Me 和 many have tried to follow Microsoft's Integrate with Office 指南,但它仅适用于 FileShare 或 OneDrive 中托管的文件。我想编辑托管在我自己的服务器上的文件。
我成功实现了(iOS 11+):
首先,您的应用程序需要有一个可用的文件提供程序扩展。我已经有了。
然后将我的扩展文件提供程序和文件提供程序项 classes 添加到我的主应用程序。
扩展中唯一没有解决的问题是试图访问文件提供程序的 documentStorageURL
。我通过在我的自定义 class:
中实现 getter 来解决这个问题
- (NSURL *)documentStorageURL
{
return NSFileProviderManager.defaultManager.documentStorageURL;
}
然后我可以初始化它并从我的主应用程序中使用它:
// I created a singleton for my custom FileProvider class
NSURL* url = [FileProvider.sharedFileProvider URLForItemWithPersistentIdentifier:item.itemIdentifier];
// Calling providePlaceholderAtURL is key
[FileProvider.sharedFileProvider providePlaceholderAtURL:url completionHandler:^(NSError * _Nullable error)
{
if (error)
{
// ...
}
// This will download the requested file from my server
[FileProvider.sharedFileProvider startProvidingItemAtURL:url completionHandler:^(NSError * _Nullable error)
{
[APP_DELEGATE hideHUD];
if (error)
{
// ...
}
// Now I can use the url to start a UIDocumentInteractionController
UIDocumentInteractionController * controller = [UIDocumentInteractionController interactionControllerWithURL:url];
// Call presentOpenInMenuFromRect ...
}];
}];
这使得 Word(以及其他 Office 和应用程序)显示“在 Word 中打开”而不是“复制到 Word”,允许直接从我的应用程序进行就地编辑。
使用我的扩展程序的 classes 并调用 providePlaceholderAtURL
(这会创建隐藏的(.myfile.docx.icloud
文件)神奇地让 Word 相信该文件来自文件应用程序。
我希望能够就地 编辑托管在我自己的服务器上的 Office 文件。就地我的意思是在 Office 中打开文件,编辑它,然后将更改直接发送回我的 app/server。
我已通过实施 File Provider Extension 在文件应用程序 (iOS 11+) 中显示我的文件来部分实现这一点,它会自动启动 Office 应用程序并将更改恢复为上传到我的服务器。我还可以从 Office 的“打开”菜单浏览到我的文件并就地进行编辑。
我会直接从我的应用程序触发此流程。有什么想法吗?
Me 和 many have tried to follow Microsoft's Integrate with Office 指南,但它仅适用于 FileShare 或 OneDrive 中托管的文件。我想编辑托管在我自己的服务器上的文件。
我成功实现了(iOS 11+):
首先,您的应用程序需要有一个可用的文件提供程序扩展。我已经有了。
然后将我的扩展文件提供程序和文件提供程序项 classes 添加到我的主应用程序。
扩展中唯一没有解决的问题是试图访问文件提供程序的 documentStorageURL
。我通过在我的自定义 class:
- (NSURL *)documentStorageURL
{
return NSFileProviderManager.defaultManager.documentStorageURL;
}
然后我可以初始化它并从我的主应用程序中使用它:
// I created a singleton for my custom FileProvider class
NSURL* url = [FileProvider.sharedFileProvider URLForItemWithPersistentIdentifier:item.itemIdentifier];
// Calling providePlaceholderAtURL is key
[FileProvider.sharedFileProvider providePlaceholderAtURL:url completionHandler:^(NSError * _Nullable error)
{
if (error)
{
// ...
}
// This will download the requested file from my server
[FileProvider.sharedFileProvider startProvidingItemAtURL:url completionHandler:^(NSError * _Nullable error)
{
[APP_DELEGATE hideHUD];
if (error)
{
// ...
}
// Now I can use the url to start a UIDocumentInteractionController
UIDocumentInteractionController * controller = [UIDocumentInteractionController interactionControllerWithURL:url];
// Call presentOpenInMenuFromRect ...
}];
}];
这使得 Word(以及其他 Office 和应用程序)显示“在 Word 中打开”而不是“复制到 Word”,允许直接从我的应用程序进行就地编辑。
使用我的扩展程序的 classes 并调用 providePlaceholderAtURL
(这会创建隐藏的(.myfile.docx.icloud
文件)神奇地让 Word 相信该文件来自文件应用程序。