Tutorial: compartilhar código entre um Suplemento VSTO e um Suplemento do Office com uma biblioteca de códigos compartilhados
Os suplementos do Visual Studio Tools for Office (VSTO) são ótimos para a ampliação do Office para fornecer soluções para seus negócios ou para outras pessoas. Eles já estão por aqui há muito tempo e há milhares de soluções criadas com o VSTO. No entanto, eles só são executados no Office no Windows. Não pode executar Suplementos VSTO no Mac, na Web ou em plataformas móveis.
Importante
Os suplementos COM e VSTO não são suportados no novo Outlook no Windows que está atualmente em pré-visualização. Estes suplementos ainda são suportados no cliente de ambiente de trabalho clássico do Outlook no Windows. Para saber mais, consulte Desenvolver suplementos do Outlook para o novo Outlook no Windows.
Os suplementos do Office usam HTML, JavaScript e tecnologias da Web adicionais para criar soluções do Office em todas as plataformas. Migrar seu Suplemento VSTO existente para um Suplemento do Office é uma ótima maneira de disponibilizá-lo em todas as plataformas.
Talvez você queira manter o Suplemento VSTO e um novo Suplemento do Office que tenham a mesma funcionalidade. Isso permite que você continue servindo aos clientes que usam o suplemento VSTO no Office no Windows. Isso também permite fornecer a mesma funcionalidade em um Suplemento do Office para clientes em todas as plataformas. Você também pode Tornar seu Suplemento do Office compatível com o Suplemento VSTO existente.
No entanto, é melhor evitar reescrever todo o código do seu Suplemento VSTO para o Suplemento do Office. Este tutorial mostra como evitar a reconfiguração de código usando uma biblioteca compartilhadas de códigos para ambos os suplementos.
Biblioteca de códigos compartilhados
Este tutorial explica-lhe os passos para identificar e partilhar código comum entre o suplemento VSTO e um Suplemento do Office moderno. Utiliza um exemplo de Suplemento VSTO muito simples para os passos para que possa concentrar-se nas competências e técnicas de que precisa para trabalhar com os seus próprios Suplementos VSTO.
O diagrama a seguir mostra como a biblioteca de códigos compartilhada funciona para migração. O código comum é refatorado em uma nova biblioteca de códigos compartilhadas. O código pode permanecer escrito em seu idioma original, como o C# ou o VB. Isso significa que você pode continuar usando o código do suplemento VSTO existente, criando uma referência do projeto. Ao criar o Suplemento do Office, ele também usará a biblioteca de códigos compartilhados chamando-a através de APIs REST.
Habilidades e técnicas neste tutorial:
- Criar uma biblioteca de classe compartilhada, refatorando o código em uma biblioteca de classe do .NET.
- Crie um invólucro da API REST usando ASP.NET Core para a biblioteca de classe compartilhada.
- Chame a API REST do Suplemento do Office para acessar o código compartilhado.
Pré-requisitos
Para configurar seu ambiente de desenvolvimento:
- Instalar o Visual Studio 2019.
- Instale as cargas de trabalho a seguir.
- ASP.NET e desenvolvimento na Web
- Desenvolvimento em várias plataformas do .NET Core
- Desenvolvimento do Office/SharePoint
- Os seguintes componentesindividuais.
- Visual Studio Tools for Office (VSTO)
- Runtime do .NET Core 3.0
Também são necessários:
- Uma conta do Microsoft 365. Pode qualificar-se para uma subscrição de programador do Microsoft 365 E5, que inclui aplicações do Office, através do Programa para Programadores do Microsoft 365; para obter detalhes, veja as FAQ. Em alternativa, pode inscrever-se numa avaliação gratuita de um mês ou comprar um plano do Microsoft 365.
- Um Locatário do Microsoft Azure. Você pode adquirir uma assinatura de avaliação no Microsoft Azure.
O suplemento VSTO do analisador de células
Este tutorial usa a solução PnP Biblioteca compartilhada do Suplemento VSTO para o Suplemento do Office. A pasta /start contém a solução de Suplemento VSTO que irá migrar. Sua meta é migrar o Suplemento VSTO para um Suplemento do Office moderno, quando possível.
Observação
O exemplo utiliza C#, mas pode aplicar as técnicas neste tutorial a um Suplemento VSTO escrito em qualquer linguagem .NET.
- Baixe a solução PnP Biblioteca compartilhada do Suplemento VSTO para o Suplemento do Office para trabalhar em um arquivo em seu computador.
- Inicie o Visual Studio 2019 e abra a solução /start/Cell-Analyzer.sln.
- No menu Depurar, selecione Iniciar Depuração.
O suplemento é um painel de tarefas personalizado do Excel. Você pode selecionar qualquer célula com o texto e escolher o botão Mostrar o Unicode. Na seção Resultado, o suplemento exibirá uma lista de cada caractere no texto junto com seu número Unicode correspondente.
Análise de tipos de código no suplemento VSTO
A primeira técnica a ser aplicada é analisar o suplemento para quais partes do código podem ser compartilhadas. Em geral, o Project é dividido em três tipos de códigos.
Código IU
O código da IU interage com o usuário. O código da interface de usuário do VSTO funciona com formulários do Windows. Os suplementos do Office usam HTML, CSS e JavaScript para IU. Devido a estas diferenças, não pode partilhar código de IU com o Suplemento do Office. A IU deve ser recriada em JavaScript.
Código do documento
No VSTO, o código interage com o documento através de objetos .NET, como Microsoft.Office.Interop.Excel.Range
. No entanto, os Suplementos do Office utilizam a biblioteca Office.js. Embora sejam semelhantes, não são exatamente iguais. Por isso, mais uma vez, não pode partilhar o código de interação do documento com o Suplemento do Office.
Código lógico
A lógica empresarial, algoritmos, funções auxiliares e um código semelhante geralmente formam o coração de um suplemento VSTO. Esse código funciona independentemente da interface de usuário e do código do documento para executar a análise, conectar-se a serviços de backend, executar cálculos e muito mais. Esse é o código que pode ser compartilhado para que você não precise escrevê-lo novamente em JavaScript.
Vamos examinar o suplemento VSTO. No código a seguir, cada seção é identificada como um código de documento, IU ou de algoritmo.
// *** UI CODE ***
private void btnUnicode_Click(object sender, EventArgs e)
{
// *** DOCUMENT CODE ***
Microsoft.Office.Interop.Excel.Range rangeCell;
rangeCell = Globals.ThisAddIn.Application.ActiveCell;
string cellValue = "";
if (null != rangeCell.Value)
{
cellValue = rangeCell.Value.ToString();
}
// *** ALGORITHM CODE ***
//convert string to Unicode listing
string result = "";
foreach (char c in cellValue)
{
int unicode = c;
result += $"{c}: {unicode}\r\n";
}
// *** UI CODE ***
//Output the result
txtResult.Text = result;
}
Com esta abordagem, pode ver que uma secção de código pode ser partilhada com o Suplemento do Office. O código seguinte tem de ser refatorizada numa biblioteca de classes separada.
// *** ALGORITHM CODE ***
//convert string to Unicode listing
string result = "";
foreach (char c in cellValue)
{
int unicode = c;
result += $"{c}: {unicode}\r\n";
}
Criar uma biblioteca de classe compartilhada
Os suplementos do VSTO são criados no Visual Studio como projetos .NET, portanto, reutilizaremos o .NET o máximo possível para simplificar. Nossa próxima técnica é criar uma biblioteca de classe e um código compartilhado de refatoração nessa biblioteca de classe.
Caso ainda não o tenha feito, inicie o Visual Studio 2019 e abra a solução \start\Cell-Analyzer.sln.
Clique com o botão direito do rato (ou selecione sem soltar) a solução no Explorador de Soluções e selecione Adicionar > Novo Projeto.
Na caixa de diálogo Adicionar um novo projeto, escolha Biblioteca de Classe (.NET Framework)e escolha Próximo.
Observação
Não utilize a biblioteca de classes .NET Core porque não funcionará com o projeto VSTO.
Na caixa de diálogo Configure seu novo Project, defina os seguintes campos.
- Defina o Nome do projeto como CellAnalyzerSharedLibrary.
- Deixe a Localização no valor predefinido.
- Defina a estrutura como 4.7.2.
Escolha Criar.
Depois de criar o projeto, renomeie o arquivo Class1.cs para CellOperations.cs. Será exibida uma solicitação para renomear a classe. Renomeie o nome da classe para que ele corresponda ao nome do arquivo.
Adicione o seguinte código à classe
CellOperations
para criar um método chamadoGetUnicodeFromText
.public class CellOperations { static public string GetUnicodeFromText(string value) { string result = ""; foreach (char c in value) { int unicode = c; result += $"{c}: {unicode}\r\n"; } return result; } }
Use a biblioteca de classe compartilhada no suplemento VSTO
Agora, você precisa atualizar o suplemento VSTO para usar a biblioteca de classe. É importante que o Suplemento VSTO e o Suplemento do Office usem a mesma biblioteca de classes compartilhadas para que correções de bugs ou recursos futuros sejam feitos em um único local.
No Explorador de Soluções, clique com o botão direito do rato (ou selecione sem soltar) no projeto Cell-Analyzer e selecione Adicionar Referência.
Selecione CellAnalyzerSharedLibrarye escolha OK.
No Explorador de Soluções, expanda o projeto Cell-Analyzer , clique com o botão direito do rato (ou selecione sem soltar) no ficheiro de CellAnalyzerPane.cs e selecione Ver Código.
No método
btnUnicode_Click
, exclua as linhas de código a seguir.//Convert to Unicode listing string result = ""; foreach (char c in cellValue) { int unicode = c; result += $"{c}: {unicode}\r\n"; }
Atualize a linha de código sob o comentário
//Output the result
para ler da seguinte maneira://Output the result txtResult.Text = CellAnalyzerSharedLibrary.CellOperations.GetUnicodeFromText(cellValue);
No menu Depurar, selecione Iniciar Depuração. O painel de tarefas personalizado deve funcionar conforme o esperado. Digite um texto em uma célula e, em seguida, teste para convertê-lo em uma lista Unicode com o suplemento.
Criar um invólucro da API REST
O suplemento VSTO pode usar a biblioteca de classes compartilhadas diretamente, uma vez que ambos são projetos .NET. No entanto, o Suplemento do Office não poderá usar o .NET, uma vez que ele usa o JavaScript. Em seguida, irá criar um wrapper da API REST. Isso permite que o Suplemento do Office chame uma API REST, que passa a chamada para a biblioteca de classes compartilhadas.
No Explorador de Soluções, clique com o botão direito do rato (ou selecione sem soltar) no projeto Cell-Analyzer e selecione Adicionar > Novo Projeto.
Em Adicionar uma nova caixa de diálogo do projeto, escolha Aplicativo Web ASP.NET Core e escolha Próximo.
Na caixa de diálogo Configure seu novo Project, defina os seguintes campos.
- Defina o nome do projeto para CellAnalyzerRESTAPI.
- No campo Local, deixe o valor padrão.
Escolha Criar.
Na caixa de diálogo criar um novo aplicativo Web ASP.NET Core, selecione ASP.NET Core 3.1 da versão e selecione API na lista de projetos.
Deixe todos os outros campos em valores padrão e escolha o botão Criar.
Depois de criar o projeto, expanda o projetoCellAnalyzerRESTAPI no Gerenciador de soluções.
Clique com o botão direito do rato (ou selecione sem soltar) Dependências e selecione Adicionar Referência.
Selecione CellAnalyzerSharedLibrarye escolha OK.
Clique com o botão direito do rato (ou selecione sem soltar) na pasta Controladores e selecione Adicionar > Controlador.
Na caixa de diálogo Adicionar Novo Item Estruturado , selecione Controlador de API – Vazio e, em seguida, selecione Adicionar.
Na caixa de diálogo Adicionar Controlador de API Vazio , dê ao controlador o nome AnalyzeUnicodeController e, em seguida, selecione Adicionar.
Abra o arquivo AnalyzeUnicodeController.cs e adicione o código a seguir como um método para a classe
AnalyzeUnicodeController
.[HttpGet] public ActionResult<string> AnalyzeUnicode(string value) { if (value == null) { return BadRequest(); } return CellAnalyzerSharedLibrary.CellOperations.GetUnicodeFromText(value); }
Clique com o botão direito do rato (ou selecione sem soltar) no projeto CellAnalyzerRESTAPI e selecione Definir como Projeto de Arranque.
No menu Depurar, selecione Iniciar Depuração.
Um navegador será iniciado. Insira a seguinte URL para testar se a API REST está funcionando:
https://localhost:<ssl port number>/api/analyzeunicode?value=test
. Você pode reutilizar o número da porta na URL no navegador que o Visual Studio iniciou. Você deverá ver uma cadeia de caracteres retornada com valores Unicode para cada caractere.
Criar o Suplemento do Office
Ao criar o Suplemento do Office, ele faz uma chamada para a API REST. Mas, primeiro, você precisa obter o número da porta do servidor da API REST e salvá-lo para mais tarde.
Salve o número da porta SSL
- Caso ainda não o tenha feito, inicie o Visual Studio 2019 e abra a solução \start\Cell-Analyzer.sln.
- No projeto CellAnalyzerRESTAPI, expanda Propriedadese abra o arquivo launchSettings. JSON.
- Localize a linha de código com o valor sslPort, copie o número da porta e salve-o em algum lugar.
Adicione o projeto do Suplemento do Office
Para simplificar, mantenha todo o código em uma solução. Adicione o projeto do Suplemento do Office à solução existente do Visual Studio. No entanto, se estiver familiarizado com o gerador Yeoman para Suplementos do Office e o Visual Studio Code, também pode executar para criar yo office
o projeto. As etapas são muito semelhantes.
- No Explorador de Soluções, clique com o botão direito do rato (ou selecione sem soltar) a solução Analisador de Células e selecione Adicionar > Novo Projeto.
- Nacaixa de diálogo Adicionar um novo projeto, clique em Suplemento do Web Add-ine escolha Próximo.
- Na caixa de diálogo Configure seu novo Project, defina os seguintes campos.
- Defina o nome do projeto comoCellAnalyzerOfficeAddin.
- Deixe a Localização no valor predefinido.
- Defina a estrutura como 4.7.2ou superior.
- Escolha Criar.
- Na caixa de diálogoEscolha o tipo de suplemento, selecione Adicionar novas funcionalidades ao Excele escolha Concluir.
Dois projetos serão criados:
- CellAnalyzerOfficeAddin - este projeto configura os arquivos XML de manifesto que descrevem o suplemento, para que o Office possa carregá-lo corretamente. Ele contém o ID, nome, descrição e outras informações sobre o suplemento.
- CellAnalyzerOfficeAddinWeb - este projeto contém recursos da Web para seu suplemento, como HTML, CSS e scripts. Ele também configura uma instância do IIS Express para hospedar seu suplemento como um aplicativo Web.
Adicionar interface de usuário e funcionalidade ao Suplemento do Office
No Gerenciador de soluções, expanda o projetoCellAnalyzerOfficeAddinWeb.
Abra o arquivo Home.HTML e substitua o conteúdo de
<body>
pela seguinte HTML.<button id="btnShowUnicode" onclick="showUnicode()">Show Unicode</button> <p>Result:</p> <div id="txtResult"></div>
Abra o arquivo Home.js e substitua todo o conteúdo pelo seguinte código.
(function () { "use strict"; // The initialize function must be run each time a new page is loaded. Office.initialize = function (reason) { $(document).ready(function () { }); }; })(); function showUnicode() { Excel.run(function (context) { const range = context.workbook.getSelectedRange(); range.load("values"); return context.sync(range).then(function (range) { const url = "https://localhost:<ssl port number>/api/analyzeunicode?value=" + range.values[0][0]; $.ajax({ type: "GET", url: url, success: function (data) { let htmlData = data.replace(/\r\n/g, '<br>'); $("#txtResult").html(htmlData); }, error: function (data) { $("#txtResult").html("error occurred in ajax call."); } }); }); }); }
No código anterior, digite o númerosslPort que você salvou anteriormente pelo arquivo . JSON.
No código anterior, a cadeia devolvida será processada para substituir feeds de linha de retorno de símbolos por <br>
etiquetas HTML. Algumas vezes, você pode encontrar situações em que um valor de retorno que funcione perfeitamente para o .NET precisará ser ajustado no Suplemento do Office para trabalhar conforme o esperado no Suplemento VSTO . Neste caso, a API REST e a biblioteca de classes partilhadas só estão relacionadas com a devolução da cadeia. A função showUnicode()
é responsável por formatar corretamente os valores de retorno para apresentação.
Permitir CORS no Suplemento do Office
A biblioteca do Office. js exige o CORS nas chamadas de saída, como a realizada na chamada ajax
para o servidor de API REST. Use as etapas a seguir para permitir chamadas do Suplemento do Office para a API REST.
No Gerenciador de soluções, selecione o projeto CellAnalyzerOfficeAddinWeb.
No menu Ver , selecione Janela Propriedades, se a janela ainda não estiver apresentada.
Na janela Propriedades, copie o valor da URL SSLe salve-a em outro local. Esta é a URL necessária para permitir o CORS.
No projeto CellAnalyzerRESTAPI, abra o arquivo Startup.cs.
Na parte superior do método, adicione o seguinte código
ConfigureServices
. Substitua a URL SSL que você copiou anteriormente para a chamadabuilder.WithOrigins
.services.AddCors(options => { options.AddPolicy(MyAllowSpecificOrigins, builder => { builder.WithOrigins("<your URL SSL>") .AllowAnyMethod() .AllowAnyHeader(); }); });
Observação
Mantenha o final
/
da URL ao usá-lo no métodobuilder.WithOrigins
. Por exemplo, ele deve parecer semelhante ahttps://localhost:44000
. Caso contrário, receberá um erro CORS no runtime.Adicione o campo a seguir à
Startup
classe.readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
Adicione o seguinte código ao método
configure
logo antes da linha de código paraapp.UseEndpoints
.app.UseCors(MyAllowSpecificOrigins);
Quando terminar, Startup
classe de deve ser semelhante ao código a seguir (a URL do localhost pode ser diferente).
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
public IConfiguration Configuration { get; }
// NOTE: The following code configures CORS for the localhost:44397 port.
// This is for development purposes. In production code, you should update this to
// use the appropriate allowed domains.
public void ConfigureServices(IServiceCollection services)
{
services.AddCors(options =>
{
options.AddPolicy(MyAllowSpecificOrigins,
builder =>
{
builder.WithOrigins("https://localhost:44397")
.AllowAnyMethod()
.AllowAnyHeader();
});
});
services.AddControllers();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseCors(MyAllowSpecificOrigins);
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
Execute o suplemento
No Explorador de Soluções, clique com o botão direito do rato (ou selecione sem soltar) no nó superior Solução "Analisador de Células" e selecione Definir Projetos de Arranque.
Na caixa de diálogo Páginas de propriedades da solução 'Cell-Analyzer', selecione Vários projetos de inicialização.
Defina a propriedade Action como Iniciar para cada um dos seguintes projetos.
- CellAnalyzerRESTAPI
- CellAnalyzerOfficeAddin
- CellAnalyzerOfficeAddinWeb
Escolha OK.
No menu Depurar, selecione Iniciar Depuração.
O Excel será executado e fará o carregamento lateral do Suplemento do Office. Você pode testar se o serviço de API REST do localhost está funcionando corretamente, inserindo um valor de texto em uma célula e escolhendo o botão Mostrar Unicode no Suplemento do Office. Ele deve chamar a API REST e exibir os valores Unicode para os caracteres de texto.
Publicar em um serviço de aplicativo do Azure
Eventualmente, você deseja publicar o projeto da API REST na nuvem. Nas etapas a seguir, você verá como publicar o projetoCellAnalyzerRESTAPI em um serviço de aplicativo do Microsoft Azure. Confira ospré-requisitos para saber mais sobre como obter uma conta do Azure.
- No Explorador de Soluções, clique com o botão direito do rato (ou selecione sem soltar) no projeto CellAnalyzerRESTAPI e selecione Publicar.
- Na caixa de diálogo Escolha um destino de publicação, selecione Criar Novoe escolha Criar Perfil.
- Na caixa de diálogo Serviço de Aplicações , selecione a conta correta, se ainda não estiver selecionada.
- Os campos para a caixa de diálogo Serviço de Aplicativo serão definidos como padrões para a sua conta. Geralmente, as predefinições funcionam bem, mas pode alterá-las se preferir definições diferentes.
- Na caixa de diálogo Serviço de Aplicativo, escolha Criar.
- O novo perfil será exibido em uma página dePublicação. Escolha Publicar para criar e implantar o código no serviço de aplicativo.
Agora você pode testar o serviço. Abra um navegador e insira uma URL que vai diretamente para o novo serviço. Por exemplo, utilize https://<myappservice>.azurewebsites.net/api/analyzeunicode?value=test
, em que myappservice é o nome exclusivo que criou para o novo Serviço de Aplicações.
Usar o Serviço de Aplicativo do Azure do Suplemento do Office
A etapa final é atualizar o código no Suplemento do Office para usar o Serviço de Aplicativo do Azure, em vez de localhost.
No Gerenciador de soluções, expanda o projetoCellAnalyzerOfficeAddinWeb e abra o arquivo Home. js.
Altere a constante
url
para usar a URL do serviço do aplicativo Azure, como mostra a linha de código a seguir. Substitua<myappservice>
pelo nome exclusivo que você criou para o novo serviço de aplicativo.const url = "https://<myappservice>.azurewebsites.net/api/analyzeunicode?value=" + range.values[0][0];
No Explorador de Soluções, clique com o botão direito do rato (ou selecione sem soltar) no nó superior Solução "Analisador de Células" e selecione Definir Projetos de Arranque.
Na caixa de diálogo Páginas de propriedades da solução 'Cell-Analyzer', selecione Vários projetos de inicialização.
Habilite iniciar para cada um dos projetos a seguir.
- CellAnalyzerOfficeAddinWeb
- CellAnalyzerOfficeAddin
Escolha OK.
No menu Depurar, selecione Iniciar Depuração.
O Excel será executado e fará o carregamento lateral do Suplemento do Office. Para testar se o Serviço de Aplicativo está funcionando corretamente, insira um valor de texto em uma célula e escolha Mostrar Unicode no Suplemento do Office. Ele deve chamar o serviço e exibir os valores Unicode para os caracteres de texto.
Conclusão
Neste tutorial, aprendeu a criar um Suplemento do Office que utiliza código partilhado com o suplemento VSTO original. Você aprendeu como manter o código VSTO do Office no Windows e um Suplemento do Office para o Office em outras plataformas. Você refatorou o código C # do VSTO em uma biblioteca compartilhada e o implantou em um Serviço de Aplicativo do Azure. Criou um Suplemento do Office que utiliza a biblioteca partilhada, para que não tenha de reescrever o código em JavaScript.