Como criar um diff legível de duas planilhas usando o git diff?

168

Temos muitas planilhas (xls) em nosso repositório de código-fonte. Geralmente são editados com gnumeric ou openoffice.org e são usados ​​principalmente para preencher bancos de dados para testes de unidade com o dbUnit . Não há maneiras fáceis de fazer diferenças nos arquivos xls que eu conheço, e isso torna a fusão extremamente tediosa e propensa a erros.

Tentei converter as planilhas em xml e fazer uma comparação regular, mas realmente parece que deveria ser o último recurso.

Gostaria de executar a difusão (e a mesclagem) com gito que faço com os arquivos de texto. Como eu faria isso, por exemplo, ao emitir git diff?

neu242
fonte
4
Acho que as tags unit-testing e dbunit são aplicadas incorretamente aqui. A questão é sobre a comparação de arquivos para um formato de arquivo específico e não tem nada a ver com o teste de unidade.
Hamish Smith
1
Não é uma resposta (requer o Excel e é um produto comercial), mas para as pessoas trazidas aqui pelo GooBinghoo - formulasoft.com/excel-compare.html funciona bem para mim.
CAD bloke
1
Eu uso esse script Python para diferenciar o Excel que fazemos check-in no git. Eu portado este código GO (que foi portado do Perl) para o Python: github.com/tokuhirom/git-xlsx-textconv#see-also Ele permite que você use git diffegitk
nmz787 2/15
Uma maneira simples para ir seria para exportar os dados de ambas as planilhas como CSV / texto e fazer um diff normal (com o seu editor preferido ou arquivos diff)
PPC

Respostas:

109

Enfrentamos exatamente o mesmo problema em nossa empresa. Nossos testes produzem pastas de trabalho do Excel. O diff binário não era uma opção. Então, lançamos nossa própria ferramenta simples de linha de comando. Confira o projeto ExcelCompare . De fato, isso nos permite automatizar nossos testes bastante bem. Solicitações de patches / recursos são bem-vindas!

na_ka_na
fonte
2
@KimStacks yes funciona para todos os xls, xlsx, ods. E pode até comparar qualquer tipo com o outro, por exemplo, xls v / s xlsx.
Na_ka_na 23/05
1
Ótima ferramenta ... mas diz "Diff falhou: falha ao ler como arquivo do excel:" para alguns arquivos xls perfeitamente válidos. Para quem procura um (muito mais pobre, de todos os outros pontos de vista) alternativa: ver github.com/toobaz/xlrd_diff
Pietro Battiston
2
O @PietroBattiston pls registra um ticket no github e eu vou dar uma olhada.
na_ka_na
@na_ka_na Obrigado por criar esta ferramenta!
precisa saber é o seguinte
111

Rápido e fácil, sem ferramentas externas, funciona bem desde que as duas planilhas que você está comparando sejam semelhantes:

  • Crie uma terceira planilha
  • Digite =if(Sheet1!A1 <> Sheet2!A1, "X", "")a célula superior esquerda (ou equivalente: clique nas células reais para inserir automaticamente as referências na fórmula)
  • Ctrl+C(copiar), Ctrl+A(selecionar tudo), Ctrl+V(colar) para preencher a folha.

Se as folhas forem semelhantes, essa planilha estará vazia, exceto por algumas células com X nelas, destacando as diferenças. Unzoom para 40% para ver rapidamente o que é diferente.

Laurent
fonte
6
Isso não faz comparação célula por célula? Quero dizer, se o lado esquerdo tiver uma linha extra no topo, isso dará todas as linhas (e células) restantes diferentes. Se é assim, isso não é muito útil.
Hammad Khan
1
@Thecrocodilehunter: você sempre pode excluir essa linha na parte superior e comparar o restante. Se as diferenças são muito mais complexas, é claro que você precisa de uma ferramenta diferente. Isso é útil para comparações rápidas e pontuais, como quando o Excel diz que você alterou a planilha e tem medo de editar acidentalmente um campo.
Iconoclast
1
Eu gostei desse. Em vez de fazer o X, você também pode fazer o "1" e ter um SUM como as primeiras linhas e colunas. Adicione um som no primeiro campo e você verá rapidamente quantos campos diferem.
Konerak
5
Eu mudei um pouco a fórmula para não precisar ver quais eram as diferenças exatas. = SE (Folha1! A1 <> Folha2! A1, CONCATENATE ("Folha 1 =", Folha1! A1, "Folha 2 =", Folha2! A1), "")
Martyn
1
Você pode apenas digitar =Sheet1!A1=Sheet2!A1. Isso imprimirá VERDADEIRO ou FALSO. Você pode fazer formatação condicional =countif(A1:B2, FALSE)ou algo semelhante.
user2023861
12

Eu fiz muitas comparações de pastas de trabalho do Excel no passado. Minha técnica funciona muito bem para pastas de trabalho com muitas planilhas, mas apenas compara o conteúdo da célula, não a formatação da célula, macros etc. Além disso, há alguma codificação envolvida, mas vale a pena se você precisar comparar vários arquivos grandes repetidamente. Veja como funciona:

A) Escreva um programa de despejo simples que percorra todas as planilhas e salve todos os dados em arquivos separados por tabulação. Crie um arquivo por planilha (use o nome da planilha como o nome do arquivo, por exemplo, "MyWorksheet.tsv") e crie uma nova pasta para esses arquivos sempre que executar o programa. Nomeie a pasta após o nome do arquivo do excel e adicione um carimbo de data / hora, por exemplo, "20080922-065412-MyExcelFile". Eu fiz isso em Java usando uma biblioteca chamada JExcelAPI . É realmente muito fácil.

B) Adicione uma extensão de shell do Windows para executar seu novo programa Java da etapa A ao clicar com o botão direito do mouse em um arquivo do Excel. Isso facilita muito a execução deste programa. Você precisa do Google como fazer isso, mas é tão fácil quanto gravar um arquivo * .reg.

C) Obtenha o BeyondCompare . Ele tem um recurso muito legal para comparar dados delimitados, mostrando-os em uma boa tabela, veja a captura de tela .

D) Agora você está pronto para comparar arquivos do Excel com facilidade. Clique com o botão direito do mouse no arquivo 1 do Excel e execute seu programa de despejo. Ele criará uma pasta com um arquivo por planilha. Clique com o botão direito do mouse no arquivo 2 do Excel e execute seu programa de despejo. Ele criará uma segunda pasta com um arquivo por planilha. Agora use BeyondCompare (BC) para comparar as pastas. Cada arquivo representa uma planilha, portanto, se houver diferenças em uma planilha, o BC mostrará isso e você poderá detalhar e fazer uma comparação de arquivos. O BC mostrará a comparação em um bom layout de tabela e você pode ocultar linhas e colunas nas quais não está interessado.

thvo
fonte
12

Você pode experimentar esta ferramenta on-line gratuita - www.cloudyexcel.com/compare-excel/

Dá uma boa saída visual online, em termos de linhas adicionadas, excluídas, alteradas etc.

insira a descrição da imagem aqui

Além disso, você não precisa instalar nada.

Shashank Singla
fonte
Infelizmente, ele funciona apenas para arquivos <2MB. Enfim, poderia funcionar para outra pessoa.
MikeVelazco 9/08/19
10

Eu encontrei o xdocdiff WinMerge Plugin . É um plugin para o WinMerge (tanto OpenSource quanto Freeware , você não precisa escrever um VBA nem salvar um excel em csv ou xml). Funciona apenas para o celd contém.

Este plugin também suporta:

  • .rtf Rich Text
  • .docx / .docm Microsoft WORD 2007 (OOXML)
  • .xlsx / .xlsm Microsoft Excel 2007 (OOXML)
  • .pptx / .pptm Microsoft PowerPoint 2007 (OOXML)
  • .doc Microsoft WORD ver5.0 / 95/97/2000 / XP / 2003
  • .xls Microsoft Excel ver5.0 / 95/97/2000 / XP / 2003
  • .ppt Microsoft PowerPoint 97/2000 / XP / 2003
  • .sxw / .sxc / .sxi / .sxd OpenOffice.org
  • .odt / .ods / .odp / .odg Abrir documento
  • .wj2 / wj3 / wk3 / wk4 / 123 Lotus 123
  • Gravação de .wri Windows3.1
  • .pdf Adobe PDF
  • Arquivo da Web .mht
  • .eml Arquivos exportados do OutlookExpress

Regard, Andres

Andres
fonte
1
Infelizmente, ele não permite salvar alterações nos arquivos descompactados, portanto, não é útil para mesclar. É grátis embora.
Sogger
6

Hummm. No menu do Excel, escolha Janela -> Comparar lado a lado?


fonte
O +1 funciona bem, mas não destaca as diferenças no Office 2007. Acho que nas versões anteriores. Ainda é muito bom para comparação visual.
Hammad Khan
2
sim, não há realce; portanto, o único benefício é a rolagem síncrona.
Sogger
5

Você usa o TortoiseSVN para realizar seus commits e atualizações no subversion? Possui uma ferramenta diff, no entanto, a comparação de arquivos do Excel ainda não é muito amigável. No meu ambiente (Win XP, Office 2007), ele abre dois arquivos do Excel para comparação lado a lado.

Clique com o botão direito do mouse em documento> Tortoise SVN> Mostrar log> selecione revisão> clique com o botão direito em "Comparar com a cópia de trabalho".

Casper
fonte
4

As versões mais recentes do MS Office vêm com o Spreadsheet Compare , que executa uma comparação bastante agradável em uma GUI. Ele detecta a maioria dos tipos de alterações.

Gremlin
fonte
Embora essa resposta provavelmente não ajude a situação do OP com uma diffmesclagem baseada em linha de comando , esta ferramenta Comparar planilha foi perfeita para meus propósitos (verificar as diferenças entre a saída de automação OpenXML e a saída de automação COM do Excel).
ErrCode 10/09
Nota:
Tentei
4

Existe uma biblioteca daff (abreviação de diff de dados) que ajuda na comparação de tabelas, produzindo um resumo de suas diferenças e usando esse resumo como um arquivo de correção.

Está escrito em Haxe, para que possa ser compilado nos principais idiomas.

Eu criei uma Ferramenta de Diferença do Excel em Javascript com a ajuda desta biblioteca. Funciona bem com números e cadeias pequenas, mas a saída não é ideal para cadeias longas (por exemplo, uma sentença longa com pequenas alterações de caracteres).

shubhu
fonte
3

Sei que várias respostas sugeriram exportar o arquivo para csv ou algum outro formato de texto e compará-las. Não o vi mencionado especificamente, mas o Beyond Compare 3 possui vários formatos de arquivo adicionais compatíveis. Consulte Formatos de arquivo adicionais . Usando um dos formatos de arquivo do Microsoft Excel, você pode comparar facilmente dois arquivos do Excel sem precisar exportar para outra opção de formato.

mattsmith321
fonte
2

Eu usaria o formato de arquivo SYLK se a execução de diferenças for importante. É um formato baseado em texto, que deve tornar as comparações mais fáceis e compactas que um formato binário. Também é compatível com Excel, Gnumeric e OpenOffice.org, portanto, todas as três ferramentas devem funcionar bem juntas. Artigo da Wikipedia sobre SYLK

Adam Hawkes
fonte
Esta é uma ótima solução que deve ser adotada como prática comum em ambientes que freqüentemente usam git com arquivos do Excel (e outros arquivos). É definitivamente amigável ao "git" (embora as diferenças não sejam legíveis por humanos) e não requer nenhuma ferramenta extra além do Excel "moderno" (agora é 2019). Também é "bidirecional", o que significa que outros usuários podem salvar suas planilhas do Excel no formato .slk (SYLK) e abrir com toda a formatação adequada etc. no Excel, quando necessário.
D. Woods,
2

Use Altova DiffDog

Use o modo diff XML do diffdog e o Grid View para revisar as diferenças em um formato tabular fácil de ler. A diferenciação de texto é MUITO MAIS DURA para planilhas de qualquer complexidade. Com esta ferramenta, pelo menos dois métodos são viáveis ​​em várias circunstâncias.

  1. Salvar como .xml

    Para detectar as diferenças de uma planilha simples de uma planilha, salve as planilhas do Excel para comparar como XML Spreadsheet 2003 com uma extensão .xml.

  2. Salvar como .xlsx

    Para detectar as diferenças da maioria das planilhas em um modelo de documento modularizado, salve as planilhas do Excel para comparar como uma pasta de trabalho do Excel no formato .xlsx. Abra os arquivos para diff com diffdog. Ele informa que o arquivo é um arquivo ZIP e pergunta se você deseja abri-lo para comparação de diretórios. Ao concordar com a comparação de diretórios, torna-se relativamente simples clicar duas vezes em partes lógicas do documento para diferenciá-las (com o modo de diferenças XML). A maioria das partes do documento .xslx são dados no formato XML. O Grid View é extremamente útil. É trivial diferenciar folhas individuais para focar a análise em áreas que se sabe terem mudado.

A propensão do Excel de ajustar certos nomes de atributos a cada salvamento é irritante, mas os recursos de difusão XML do diffdog incluem a capacidade de filtrar certos tipos de diferenças. Por exemplo, as planilhas do Excel no formato XML contêm rowe celementos que possuem satributos (estilo) que são renomeados a cada salvamento. Configurar um filtro como c:sesse facilita muito a exibição apenas de alterações de conteúdo.

O diffdog tem muita capacidade de diferenciação. Eu listei os modos de diferenças XML apenas porque não usei outra ferramenta de que gostei mais quando se trata de diferenciar documentos do Excel.

Kbulgrien
fonte
1

Encontrei uma macro do openoffice aqui que invocará a função de comparar documentos do openoffice em dois arquivos. Infelizmente, a comparação da planilha do openoffice parece um pouco esquisita; Acabei de colocar o botão 'Rejeitar tudo' inserir uma coluna supérflua no meu documento.


fonte
1

plugin xdocdiff para SVN

graveDust
fonte
xdocdiff parece bom, mas parece exigir TortioseSVN
neu242
xdocdiff também tem um plugin WinMerge, ambos uso xdoc2txt nos bastidores
Sogger
1

Se você estiver usando Java, tente o simple-excel .

Ele difere as planilhas usando os combinadores Hamcrest e produz algo parecido com isto.

java.lang.AssertionError:
Expected: entire workbook to be equal
     but: cell at "C14" contained <"bananas"> expected <nothing>,
          cell at "C15" contained <"1,850,000 EUR"> expected <"1,850,000.00 EUR">,
          cell at "D16" contained <nothing> expected <"Tue Sep 04 06:30:00">
    at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)

Devo qualificar que escrevemos essa ferramenta (como a resposta marcada).

Toby
fonte
2
Obrigado por postar sua resposta! Leia atentamente as Perguntas frequentes sobre autopromoção. Observe também que é necessário que você publique um aviso sempre que vincular ao seu próprio site / produto.
Andrew Barber
1

Se você possui o TortoiseSVN, pode CTRLclicar nos dois arquivos para selecioná-los no Windows Explorer e clicar com o botão direito do mouse em TortoiseSVN-> Diff.

Isso funciona particularmente bem se você estiver procurando por uma pequena alteração em um grande conjunto de dados.

Chris B
fonte
Isso não funciona particularmente bem, no entanto, para arquivos binários como o formato XLS do Excel.
Charles Wood
1
@CharlesWood - na verdade ele faz o trabalho muito bem. O Tortoise usa o próprio Excel para fornecer a diferença e destaca as diferentes células em vermelho. Eu não tentei, mas tenho certeza que também faz o mesmo para arquivos .doc e .docx do Word (usando o Word como o visualizador de diferenças).
31713 Chris
O que! O meu não faz isso. É um novo recurso ou você instalou um plugin?
Charles Wood
:-D Eu tenho o TortoiseSVN 1.7.12 e faz isso imediatamente. O arquivo de ajuda afirma que ele possui suporte para isso - tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-diff.html . Ele usa um script para diferenciar os arquivos que em minha máquina são C: \ Arquivos de Programas \ TortoiseSVN \ Diff-Scripts \ diff-xls.js. É possível que você tenha uma política de grupo em sua máquina que desativou o script?
Chris B
1

Eu tenho o problema como você, então decido escrever uma pequena ferramenta para me ajudar. Por favor, verifique ExcelDiff_Tools . Ele vem com vários pontos-chave:

  • Suporte xls, xlsx, xlsm.
  • Com célula de fórmula. Ele irá comparar a fórmula e o valor.
  • Tento fazer com que a interface do usuário pareça com o visualizador de texto diferencial padrão com: status modificado, excluído, adicionado e inalterado. Dê uma olhada na imagem abaixo, por exemplo: insira a descrição da imagem aqui
kokichi88
fonte
1

Eu sou o co-autor de uma extensão Git gratuita e de código aberto:

https://github.com/ZoomerAnalytics/git-xltrail

Faz o Git funcionar com qualquer formato de arquivo da pasta de trabalho do Excel sem nenhuma solução alternativa.

Bjoern Stiel
fonte
0

Diff Doc pode ser o que você está procurando.

  • Compare documentos do MS Word (DOC, DOCX, etc), Excel, PDF, Rich Text (RTF), Texto, HTML, XML, PowerPoint ou Wordperfect e mantenha a formatação
  • Escolha qualquer parte de qualquer documento (arquivo) e compare-a com qualquer parte do mesmo ou de outro documento (arquivo).
ConroyP
fonte
2
Diff Doc é apenas para janelas e de código fechado, realmente não se encaixa nas minhas necessidades.
Neu242 22/09/08
0

Não conheço nenhuma ferramenta, mas existem duas soluções de "faça você mesmo", que exigem o Excel:

  1. Você pode escrever um código VBA que percorre cada planilha, linha, coluna e célula das duas pastas de trabalho, relatando diferenças.

  2. Se você usa o Excel 2007, você pode salvar as Pastas de Trabalho como formato Open-XML (* .xlsx), extrair o XML e diferenciá-lo. O arquivo Open-XML é essencialmente apenas um arquivo .zip de arquivos .xml e manifestos.

Em ambos os casos, você terá muito "ruído" se suas planilhas não estiverem estruturalmente "fechadas" para começar.

lesscode
fonte
A partir do Excel 2002, você também pode salvar no formato 'XML Spreadsheet', que é mais simples do que lidar com arquivos xlsx.
25110 Sam Warwick
0

Converta em cvs, faça o upload para um sistema de controle de versão e depois faça a diferença com uma ferramenta avançada de controle de versão Quando usei o forforce, ele tinha uma ótima ferramenta diff, mas esqueço o nome dela.

patrick
fonte