
Como posso exportar uma planilha ou tabela ou seleção para outro formato de arquivosem alterar o documento atualmente ativo?
Nosso principal ambiente de operação de dados é o Excel, onde o uso extensivo de formatação e fórmulas é usado para obter os resultados desejados. Os resultados são então salvos .CSV
para interoperabilidade com outros programas.
Quando "Arquivo >>Salvar como>> Salvar como tipo >> CSV" é usado o arquivo .csv é criadoeo documento ativo é alterado para saved_file.csv
. Existem alguns avisos sobre a perda de funcionalidade e formatação com este novo formato, mas fora isso a interface do usuário permanece inalterada. Existem negrito e itálico, diferentes fontes e tamanhos, preenchimentos de células de fundo, intervalos de tabelas definidos e assim por diante. Todas as fórmulas nas células permanecem intactas.
Isso é um desastre esperando para ocorrer. O usuário volta ao trabalho, levado a 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, dão um tapa Sim duas vezes em diálogos irritantes que não são lidos porque os veem o tempo todo e saem pela porta. ...Depois do almoço, o usuário volta e percebe que todo o trabalho entre Salvar como e Sair inicial desapareceu.
"Arquivo >>Exportar", infelizmente, é apenas mais uma rota de navegação para "Salvar como", alterando também 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 pode ser compartilhado com todos na organização? (sem pedir a usuários individuais que abram um editor VBA, etc.)
Responder1
O que precisamos é exportar alguns dados para outro tipo de arquivo e manter o documento ativo "our-real-data.xlsx".
CSV_tools.xla
Eu criei um complemento VBA rápido que exporta como CSV desde que você mencionou. Tentei usar o mínimo de código possível para que novos usuários possam entendê-lo com mais facilidade.
O que isso
- O suplemento pergunta onde salvar o CSV. Pasta padrão é a pasta onde o XLS é salvo
- O suplemento detecta automaticamente se uma vírgula ou ponto e vírgula deve ser usado como separador em relação às configurações regionais do sistema
- Todos os valores da planilha Excel atualmente ativa são exportados para um novo arquivo CSV com o nome do arquivo XLS
- O XLS existente não é tocado de forma alguma
Instalação
- Faça o download doAdicionar eme salve-o abaixo
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
- Abra o Excel e ative-o em
- Excel 2003: Barra de menu → Ferramentas → Suplementos
- Excel 2007: Opções do Excel → Suplementos → Ir para
- Excel 2010-13: guia Arquivo → Opções → Suplementos → Ir para
Reinicie o Excel e observe sua barra de menu
Código VBA
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
Depois que cada usuário tiver habilitado o suplemento em seu Excel (não pode ser automatizado), você poderá copiar a nova .xla
versão do arquivo por meio de compartilhamento de rede, Robocopy ou ferramentas semelhantes. Mas esta deveria ser uma questão separada, uma vez que existem 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()
Responder2
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 no ícone e clicar em Novo. Isso cria um novo documento/planilha/apresentação, baseado no original. Os usuários podem exportar a partir disso, apenas salvando como
Espero que você também tenha bons backups, se estiver tão preocupado ...