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

5

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

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

Quando "Arquivo >> Salvar como >> Salvar como tipo >> CSV" é usado, o arquivo .csv é criado e o documento ativo é 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 permanece inalterada. Há negrito e itálico, fontes e tamanhos diferentes, preenchimentos de células em segundo plano, 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, achando que tudo está normal, logo esquece que o formato atual não suporta nenhuma mágica e continua fazendo Coisas Importantes (tm). A hora do almoço chega, eles fecham o Excel, dão um tapa no Yes 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 o Save As e Exit inicial se foi.

"Arquivo >> Exportar ", infelizmente, é apenas mais uma 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 a usuários individuais para abrir um editor VBA etc.)

Matt Wilson
fonte
Tente dar uma olhada aqui, parece que eles criam um botão e exportam os dados usando o VBA. linkedin.com/pulse/…
Steve

Respostas:

2

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

CSV_tools.xla

Reunimos um rápido suplemento VBA que exporta como CSV desde que você o mencionou. Tentei usar o menos código possível para que os novos usuários possam entendê-lo com mais facilidade.

O que faz

  • O suplemento pergunta onde salvar o CSV. Pasta padrão é a pasta em que o XLS é salvo em
  • 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 do Excel atualmente ativa são exportados para um novo arquivo CSV que recebe o nome do arquivo XLS
  • O XLS existente não é tocado de forma alguma

Instalação

  1. Faça o download do suplemento e salve-o emC:\Users\%USERNAME%\AppData\Roaming\Microsoft\AddIns
  2. Abra o Excel e ative-o em
    • 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 veja sua barra de menus

    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 todos os usuários tiverem habilitado o Suplemento no Excel (não pode ser automatizado), você poderá copiar a nova .xlaversão do arquivo via compartilhamento de rede, Robocopy ou ferramentas similares. Mas essa deve ser uma pergunta 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 ()

nixda
fonte
Obrigado por isso. Funciona como descrito na maioria das planilhas que eu tenho, mas em uma delas gera "Erro em tempo de execução '13': incompatibilidade de tipo", após o que pressionar [debug] me deixa na linha arr1D = Application.Index(arr2D, 1, 0). Desculpe, não posso compartilhar o problema. Vou tentar gerar uma versão lorem-ipsum para teste.
Matt Wilkie
@mattwilkie Será que a folha está vazia? Preste atenção em como os dados estão estruturados nesta folha específica. Tudo em uma linha? várias linhas? Tudo em uma coluna? Várias colunas?
Nixda
Não, não está vazio. 675 linhas, colunas para V. ... tem algo a ver com o conteúdo: uma das colunas incorporou trechos de html como texto, por exemplo <div class="WordSection1"><p class="MsoNormal"><span style="color:#1F497D;mso-fareast-language:EN-US">Review proposal.... Após remover essa coluna, a exportação das Ferramentas CSV funciona. A rota regular do menu salvar como tipo de arquivo CSV não tem nenhum problema com a coluna html em vigor.
Matt Wilkie
muito por ser preguiçoso e não querer usar ftp (e um ataque ao tinyupload.com). Tente isso: files.environmentyukon.ca/matt/CSV_Tools
matt wilkie
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 Salvar como

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

Canadian Luke
fonte
11
Isso realmente não funciona, porque as exportações devem capturar vários estágios de análise, instantâneos, se você desejar. Bob faz X, Y, Z ... depois exporta para CSV, seguido de A, B, C ... depois exporta. Enxágue, ensaboar. repetir. Se a opção abrir como cópia for usada, todas as "tarefas" no meio serão descartadas (não salvas no arquivo xls).
mate Wilkie