标签: officedev

用于Office的Microsoft Visual Studio工具.值得使用吗?

似乎部署VSTO代码非常麻烦.

我的用例是我需要在单词中强制执行某个内容结构.我最好在VBA中做到这一切吗?

vsto officedev

6
推荐指数
1
解决办法
425
查看次数

Word加载项CustomXMLParts数据建模和/或性能优化

环境:Mac 10.12.6,Word 2016(16.11.1),@ microsoft/office-js"^ 1.1.4"

我想知道在如何使用CustomXMLParts方面有任何指导方针或最佳实践,以便最大限度地提高读/写性能,或者是否有一种"理想"方式来为同一目的在XML部件中建模数据.

我正在编写一个加载项,我需要在可见文档之外保留一些数据,但是在docx文件中.

例如,我存储了一张发票清单(可能是100-200张发票),每张发票都有典型的结构化数据(名称,ID,日期,工作项列表)和自由式备注部分,最多可包含5个-10kb的文字,说明等

我拿这些发票,在Word文档中渲染其中一些,然后在任务窗格中对其余数据进行一些可视化分析 - 用户可以将注释写入(并保存)回自定义XML部件(到该发票中)他们正在看).

现在......这里我有点困惑......我不确定将每张发票作为单独的CustomXMLPart存储在文件中是否更好(例如每张发票1个XML文件),或者是否最好存储所有发票在单个大型CustomXMLPart中,或者如果存在中间地点(例如,每个XML部分有10个发票).如上所述,用例是回读所有发票,然后偶尔更新10-20%的发票中的数据.

现在,我正在为每个XML部分存储1个发票,当我加载我的插件并进行批量读取以将所有内容都存入内存时,每个发票需要250-500平方英寸才能将它们并行读取(所以,250-500ms*100-200发票).顺序地,它需要更长的时间(2-3倍长).使用performance.now()使用挂钟计时进行测试.

这似乎很长一段时间,所以我不知道我是否做错了 - 或者这只是从这些文件中打开和提取数据所需的时间?

// Sequential example - excluding error handling and type-safety
// Parallel equivalent is essentially a Promise.all with a .map

// Approx 50ms
let result = await this.xmlPartsHelper.getByNamespaceAsync(...);

for (const item of result.value) {
    // Approx 150-200ms
    result = await this.xmlPartsHelper.getByIdAsync(item.id);

    // Approx 150-200ms
    result = await this.xmlPartsHelper.getXmlAsync(result.value);

    // Approx 5ms
    const invoice = this.mapper.reverseMap(result.value);
    invoices.push(invoice)
}
Run Code Online (Sandbox Code Playgroud)

我使用Promises手动包装Office-JS回调,但我已经使用async/await,然后是/ catch和office-js回调测试了这个示例 - 结果大致相同.

public getByNamespaceAsync(namespace: string): Promise<Office.AsyncResult> …
Run Code Online (Sandbox Code Playgroud)

ms-word officedev office-addins office-js

5
推荐指数
1
解决办法
406
查看次数

在 SP2013 中使用 REST 和 HTTPClient 创建文件夹

我正在尝试使用 HTTPClient 和 REST 在 SP2013 中创建一个文件夹。

以下是对应用程序的要求和限制

  1. 我需要使用 REST 在 2013 文档库中创建一个文件夹。不允许 CSOM。

  2. 该程序必须是 C# 控制台应用程序。

  3. 我必须仅使用 HTTPClient 来调用 Web 服务。不应使用其他旧类或库。

  4. 集成身份验证是必须的。您不得在代码中输入您的用户名和密码。它必须使用进程的标识。

基于这些限制,我写了这段代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Formatting;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace RESTCreateFolder
{
    class Program
    {
        static void Main(string[] args)
        {
            Program p = new Program();
            int retVal = p.Process().Result;            
        }

        private async Task<int> Process()
        {
            string url = "http://bi.abhi.com/testweb/";
            using (HttpClient client = new HttpClient(new …
Run Code Online (Sandbox Code Playgroud)

c# officedev dotnet-httpclient sharepoint-2013 office365-apps

4
推荐指数
1
解决办法
6823
查看次数

未捕获的ReferenceError:未在sp.runtime.js中定义类型

我正在尝试使用Office PnP中的分类法Picker示例.

我只想将一个字段绑定到一个托管元数据术语.

我得到的错误在这里:http: //screencast.com/t/nOaTusUH4V

我的代码是:

<head>
    <meta charset="utf-8" />
    <title>Learning bootstrap</title>    
    <meta name="viewport" content="width=device-width, initial-scale=1">   

    <link href="../Content/bootstrap.min.css" rel="stylesheet" /> 
    <link href="../Content/bootstrap-theme.min.css" rel="stylesheet" />
    <link rel="Stylesheet" type="text/css" href="../Content/taxonomypickercontrol.css" />
    <script src="../Scripts/jquery-2.1.1.min.js"></script>
    <script type="text/javascript" src="/_layouts/15/sp.runtime.js"></script>
    <script type="text/javascript" src="/_layouts/15/sp.js"></script>

    <script src="../Scripts/app.js" type="text/javascript"></script>
    <script src="../Scripts/taxonomypickercontrol.js" type="text/javascript"></script>
</head>


body>
    <div id="divSPChrome"></div>
    <div class="container">      
        <div class="row">
            <div class="col-md-8">
                <h2>Create project site</h2>
                <form class="form-horizontal" role="form">
                    <div class="form-group">
                        <label for="inputEmail3" class="col-sm-2 control-label">Project name</label>
                        <div class="col-sm-10">
                            <input type="text" class="form-control" id="inputEmail3" placeholder="Project name">
                        </div>
                    </div>
                    <div class="form-group"> …
Run Code Online (Sandbox Code Playgroud)

javascript sharepoint jquery officedev sharepoint-apps

4
推荐指数
1
解决办法
2万
查看次数

为Excel VBA解决方案创建用户帮助文档的最佳方法是什么?

VBA解决方案的规模可能有很大差异.

我想在所有解决方案中添加用户帮助文档,但创建和部署帮助的工作量需要与解决方案的大小相匹配.

excel vba officedev excel-vba

2
推荐指数
1
解决办法
7821
查看次数

适用于所有excel版本的程序

我最近开发了一个Windows窗体应用程序,它有几个数据网格.我的客户需要将数据导出到Excel中.他们使用不同版本的Excel(即2003,2007,2010,2013),但我使用的是Office 2013.我使用了excel 2013参考资料

(Microsoft excel 15.0对象库)

在我的程序中.最近,我的客户报告说导出选项不起作用.从我的调查看来,我的应用程序似乎适用于那些使用Office 2013但不适用于以前的Office版本的用户.

我该怎么做才能确保我的应用程序在旧版本的Excel中运行?

vb.net excel officedev

2
推荐指数
1
解决办法
1万
查看次数

链接和 JS 重定向,导致在 Office JS 加载项中打开一个新窗口

我正在处理一个演出,它是一个 Office (Excel) 2016 加载项,用于与 Web 应用程序进行数据集成。我们使用的是 Office JS API,并且 XML 清单文件指向一个 AngularJS Web 应用程序。一切正常,到目前为止工作正常。

最近,我们决定向 Web 应用程序添加 OAuth2 功能,以便用户可以通过 3rd 方授权服务器进行身份验证。

问题是,一旦我放置了一个链接(<a>标签)或运行 awindow.location.replace()或设置window.location.hrefwhich指向一个主机名而不是清单文件中提到的主机名的 URL,它会在新窗口中打开 URL,而我想要它只是重定向到加载项窗口中的 URL。

有人知道如何解决这个问题吗?

谢谢

javascript officedev ms-office oauth-2.0 angularjs

1
推荐指数
1
解决办法
788
查看次数