Como exportar - não salvar como - para outro formato?

4

Como posso exportar uma planilha ou tabela ou seleção para outro formato de arquivo sem alterar o documento atualmente ativo ?

Nosso ambiente de operação de dados primário está no Excel, onde o uso extensivo de formatação e fórmulas é usado para obter os resultados desejados. Os resultados são salvos como .CSV para interoperabilidade com outros programas.

Quando "Arquivo > > Salvar como > > Salvar como tipo > > CSV" é usado, o arquivo .csv é criado e o ativo documento é alterado para saved_file.csv . Existem alguns avisos sobre a perda de funcionalidade e formatação com este novo formato, mas, caso contrário, a interface do usuário não será alterada. Há negrito e itálico, fontes e tamanhos diferentes, preenchimentos de célula de plano de fundo, intervalos de tabela definidos e assim por diante. Todas as fórmulas nas células permanecem intactas.

Este é um desastre esperando para acontecer. O usuário volta ao trabalho, acalenta-se em pensar que tudo está normal, logo esquece que o formato atual não suporta nenhuma mágica e continua fazendo Important Stuff (tm). Chega a hora do almoço, eles fecham o Excel, batem Sim duas vezes para diálogos irritantes que não são lidos porque eles os vêem o tempo todo e saem pela porta. ... Após o almoço, o usuário volta e percebe que todo o trabalho entre as iniciais Save As e Exit acabou.

"Arquivo > > Exportar ", infelizmente, é apenas outra rota de navegação para "Salvar como", também alterando o documento ativo para "some_file.csv".

O que precisamos é exportar alguns dados para outro tipo de arquivo e manter o documento ativo "our-real-data.xlsx".

Como isso pode ser feito? E adicionado ao menu ou faixa de opções para execução com um clique?

Como isso pode ser compartilhado com todos na organização? (sem pedir que usuários individuais abram um editor de VBA, etc.)

    
por matt wilkie 25.09.2015 / 20:36

2 respostas

2

What we need is to export some data to another file type and keep the active document "our-real-data.xlsx".

CSV_tools.xla

Eu montei um rápido add-in do VBA que exporta como CSV desde que você o mencionou. Tentei usar o menor código possível para que novos usuários possam entendê-lo com mais facilidade.

O que isso faz

    O
  • add-in pergunta onde salvar o CSV. Pasta padrão é a pasta onde o XLS é salvo em
  • O suplemento detecta automaticamente se uma vírgula ou ponto e vírgula devem ser usados como separador em relação às configurações do sistema regional
  • Todos os valores da planilha do Excel atualmente ativa são exportados para um novo arquivo CSV que é nomeado após o arquivo XLS
  • O XLS existente não é tocado de nenhuma forma

Instalação

  1. Faça o download do Add-In e salve-o em C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
  2. Abra o Excel e ative-o sob
    • Excel 2003: Barra de menus → Ferramentas → Suplementos
    • Excel 2007: Opções do Excel → Suplementos → Ir para
    • Excel 2010-13: guia Arquivo → Opções → Suplementos → Ir para
  3. Reinicie o Excel e observe sua barra de menus

códigoVBA

Function ExportCSV() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") On Error Resume Next ChDrive (ActiveWorkbook.Path) ChDir (ActiveWorkbook.Path) strName = fso.GetBaseName(ActiveWorkbook.Name) On Error GoTo 0 strFilename = Application.GetSaveAsFilename(strName, "CSV Files,*.csv", 1) delimiter = Application.International(xlListSeparator) If Not strFilename = False Then Open strFilename For Append As #1 For Each rngRow In ActiveSheet.UsedRange.Rows arr2D = rngRow arr1D = Application.Index(arr2D, 1, 0) strRow = Join(arr1D, delimiter) Print #1, strRow Next Close #1 End If End Function

Atualizações automáticas para diferentes usuários

Uma vez que cada usuário tenha ativado o Add-in em seu Excel (não pode ser automatizado), você pode copiar a nova versão do arquivo .xla via compartilhamento de rede, Robocopy ou ferramentas similares. Mas esta deve ser uma questão separada, pois há muitas maneiras diferentes de resolver o problema.

Para os geeks do VBA, a parte mais interessante é

arr2D = rngRow
arr1D = Application.Index(arr2D, 1, 0)
strRow = Join(arr1D, delimiter)

que converte um intervalo (uma única linha no nosso caso) em um array 2D, depois em um array 1D e finalmente em uma única string usando a função Join ()

    
por 25.09.2015 / 22:43
0

Ensine o usuário a abrir uma cópia desses dados.

Ao selecionar um documento do Office, você pode clicar com o botão direito do mouse no ícone e clicar em Novo. Isso cria um novo documento / folha / apresentação, com base no original. Os usuários podem exportar a partir disso, apenas fazendo um Save As

Espero que você também tenha bons backups, se estiver preocupado ...

    
por 25.09.2015 / 22:20