CSV_tools.xla

CSV_tools.xla

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 .CSVpara 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

  1. Faça o download doAdicionar eme salve-o abaixoC:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
  2. 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
  3. Reinicie o Excel e observe sua barra de menu

    insira a descrição da imagem aqui

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 .xlaversã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 ...

informação relacionada