gitdiff를 사용하여 두 스프레드시트에서 읽을 수 있는 diff를 만들려면 어떻게 해야 합니까?
소스 코드 저장소에 많은 스프레드시트(xls)가 있습니다.일반적으로 gnumeric 또는 openoffice.org 으로 편집되며, 대부분 dbUnit로 장치 테스트를 위해 데이터베이스를 채우는 데 사용됩니다.제가 아는 xls 파일에서 diff를 쉽게 수행할 수 있는 방법은 없으며, 이로 인해 병합이 매우 지루하고 오류가 발생하기 쉽습니다.
스프레드시트를 xml로 변환하고 정기적으로 diff를 하려고 했지만, 정말 마지막 수단이 되어야 할 것 같습니다.
디핑(및 병합)을 수행하고 싶습니다.git
텍스트 파일을 사용하는 것입니다.예를 들어 발급할 때 어떻게 해야 합니까?git diff
?
우리 회사에서도 똑같은 문제에 직면했습니다.우리의 테스트는 우수한 워크북을 출력합니다.이진 diff는 옵션이 아닙니다.그래서 우리는 우리만의 간단한 명령줄 도구를 출시했습니다.Excel Compare 프로젝트를 확인하십시오.실제로 이를 통해 테스트를 상당히 효율적으로 자동화할 수 있습니다.패치/기능 요청을 환영합니다!
외부 도구 없이 빠르고 쉽게 사용할 수 있으며, 비교 중인 두 시트가 유사한 경우에도 잘 작동합니다.
- 세 번째 스프레드시트 만들기
- 왼쪽 상단 셀을 입력합니다(또는 동등한 셀: 공식에 참조를 자동으로 삽입하려면 실제 셀 클릭).
- Ctrl+C (복사), (모두 선택), (선택), (선택)을 눌러 시트를 채웁니다.
시트가 유사한 경우 이 스프레드시트는 X가 들어 있는 몇 개의 셀을 제외하고 비어 차이점을 강조합니다.40%까지 확대/축소하여 무엇이 다른지 빠르게 확인합니다.
이 무료 온라인 도구를 사용할 수 있습니다 - www.cloudyexcel.com/compare-excel/
행 추가, 삭제, 변경 등의 측면에서 온라인으로 시각적 출력이 우수합니다.
또한 아무것도 설치할 필요가 없습니다.
저는 과거에 엑셀 워크북을 비교를 많이 했습니다.제 기술은 워크시트가 많은 워크북에서 매우 잘 작동하지만 셀 형식 지정, 매크로 등이 아닌 셀 내용만 비교합니다.또한 코딩 작업도 포함되어 있지만 많은 대용량 파일을 반복적으로 비교해야 하는 경우에는 충분히 가치가 있습니다.작동 방식은 다음과 같습니다.
모든 워크시트를 단계적으로 처리하고 모든 데이터를 탭으로 구분된 파일에 저장하는 간단한 덤프 프로그램을 작성합니다.워크시트당 하나의 파일을 만들고(예: "MyWorksheet.tsv") 프로그램을 실행할 때마다 워크시트 이름을 파일 이름으로 사용) 이러한 파일에 대한 새 폴더를 만듭니다.Excel 파일 이름 뒤에 폴더 이름을 지정하고 타임스탬프(예: "20080922-065412-MyExcelFile")를 추가합니다.저는 Jexcel이라는 라이브러리를 사용하여 자바에서 이것을 했습니다.API. 정말 간단합니다.
Excel 파일을 마우스 오른쪽 버튼으로 클릭할 때 A 단계부터 새 Java 프로그램을 실행할 수 있도록 Windows 셸 확장자를 추가합니다.이것은 이 프로그램을 실행하는 것을 매우 쉽게 만듭니다.이 작업을 수행하는 방법을 구글로 검색해야 하지만 *.reg 파일을 작성하는 것만큼 쉽습니다.
비교를 넘어서세요.구분된 데이터를 멋진 테이블에 표시하여 비교할 수 있는 매우 멋진 기능이 있습니다. 스크린샷을 참조하십시오.
이제 Excel 파일을 쉽게 비교할 수 있습니다.Excel 파일 1을 마우스 오른쪽 버튼으로 클릭하고 덤프 프로그램을 실행합니다.워크시트당 하나의 파일로 폴더를 만듭니다.Excel 파일 2를 마우스 오른쪽 버튼으로 클릭하고 덤프 프로그램을 실행합니다.워크시트당 하나의 파일로 두 번째 폴더를 만듭니다.이제 BC(BeyondCompare)를 사용하여 폴더를 비교합니다.각 파일은 워크시트를 나타내므로 워크시트에 차이가 있는 경우 BC가 이를 표시하고 드릴다운하여 파일을 비교할 수 있습니다.BC는 적절한 테이블 레이아웃으로 비교를 표시하며, 관심 없는 행과 열을 숨길 수 있습니다.
xdocdiff WinMerge 플러그인을 찾았습니다.WinMerge용 플러그인입니다(오픈소스와 프리웨어 모두 VBA를 작성하거나 엑셀을 csv나 xml에 저장할 필요가 없습니다).그것은 세포의 용기에만 작용합니다.
이 플러그인은 다음도 지원합니다.
- .rtf 리치 텍스트
- .docx/.doccm Microsoft WORD 2007(OOXML)
- .xlsx/.xlsm Microsoft Excel 2007(OOXML)
- .pptx/.pptm Microsoft PowerPoint 2007(OOXML)
- .doc 마이크로소프트 WORD ver 5.0/95/97/2000/XP/2003
- .xls Microsoft Excel ver 5.0/95/97/2000/XP/2003
- .ppt 마이크로소프트 파워포인트 97/2000/XP/2003
- .sxw/.sxc/.sxi/.sxi/.sxd OpenOffice.org
- .odt/.ods/.oddp/.odg 문서 열기
- .wj2/wj3/wk3/wk4/123 Lotus 123
- .wri Windows 3.1 쓰기
- .pdf Adobe PDF
- .mht 웹 아카이브
- .eml Outlook에서 내보낸 파일표현
안드레스, 존경합니다.
흠. 엑셀 메뉴에서 창 -> 나란히 비교하기를 선택합니다.
당신은 거북이를 사용합니까?서브버전에서 커밋 및 업데이트를 수행하기 위한 SVN?그것은 어려운 도구를 가지고 있지만, 엑셀 파일을 비교하는 것은 여전히 사용자 친화적이지 않습니다.내 환경(Win XP, Office 2007)에서는 두 개의 Excel 파일을 나란히 열어 비교합니다.
문서 우클릭 > Tortoo SVN > 로그보기 > 개정판 선택 > 작업복사본과 비교를 위한 우클릭
테이블을 비교하고, 테이블의 diff 요약을 생성하고, 이러한 요약을 패치 파일로 사용하는 데 도움이 되는 라이브러리 daff(데이터 diff의 줄임말)가 있습니다.
그것은 악세어로 쓰여져 있어서 주요 언어로 컴파일이 가능합니다.
저는 이 도서관의 도움을 받아 자바스크립트로 엑셀 디프 툴을 만들었습니다.숫자와 작은 문자열에서는 잘 작동하지만 출력이 긴 문자열(예: 작은 문자 변경이 있는 긴 문장)에는 적합하지 않습니다.
diff를 수행하는 것이 중요하다면 저는 sylk 파일 형식을 사용할 것입니다.텍스트 기반 형식이므로 이진 형식보다 비교가 쉽고 압축됩니다.Excel, Gnumeric, OpenOffice.org 과도 호환되므로 세 가지 도구가 모두 잘 연동될 수 있을 것입니다.
파일을 csv나 다른 텍스트 형식으로 내보낸 다음 비교하자는 의견이 여러 개 있는 것으로 알고 있습니다.구체적으로 언급된 것은 아니지만, 비욘드 비교 3은 지원하는 여러 추가 파일 형식을 가지고 있습니다.추가 파일 형식을 참조하십시오.Microsoft Excel 파일 형식 중 하나를 사용하면 다른 형식으로 내보내기 옵션을 수행하지 않고도 두 Excel 파일을 쉽게 비교할 수 있습니다.
최신 버전의 MS Office에는 스프레드시트 비교 기능이 함께 제공되며, 이 기능은 GUI에서 상당히 큰 차이를 보입니다.대부분의 변경 사항을 감지합니다.
Altova DiffDog 사용
diffdog의 XML diff 모드와 그리드 보기를 사용하여 읽기 쉬운 표 형식으로 차이점을 검토합니다.복잡한 스프레드시트의 경우 텍스트 차별화가 훨씬 어렵습니다.이 도구를 사용하면 다양한 상황에서 두 가지 이상의 방법을 사용할 수 있습니다.
.xml로 저장
단순한 단일 시트 스프레드시트의 차이를 감지하려면 Excel 스프레드시트를 저장하여 확장명이 .xml인 XML 스프레드시트 2003과 비교합니다.
.xlsx로 저장
모듈화된 문서 모델에서 대부분의 스프레드쉬트의 차이를 감지하려면 Excel 스프레드쉬트를 저장하여 .xlsx 형식의 Excel Workbook과 비교합니다.diffdog로 diff할 파일을 엽니다.파일이 ZIP 보관 파일임을 알려주고 디렉토리 비교를 위해 파일을 열 것인지 묻습니다.디렉토리 비교에 동의하면 문서의 논리적 부분을 두 번 클릭하여 (XML diff 모드를 사용하여) 구분하는 것이 비교적 간단한 문제가 됩니다..xslx 문서의 대부분은 XML 형식의 데이터입니다.그리드 보기는 매우 유용합니다.개별 시트를 분산하여 변경된 것으로 알려진 영역에 분석의 초점을 맞추는 것은 사소한 일입니다.
저장할 때마다 특정 속성 이름을 수정하는 Excel의 경향은 짜증나지만 diffdog의 XML 디피핑 기능에는 특정 종류의 차이를 필터링하는 기능이 포함되어 있습니다.들어 의 Excel 형식의 Excel 스프레드시트가 포함되어 .row
그리고.c
가있요소가 있는 s
저장할 때마다 이름을 변경하는 특성(스타일)입니다. 설필정과 같은 c:s
내용 변경사항만 보다 쉽게 볼 수 있습니다.
diffdog는 많은 차별화된 능력을 가지고 있습니다.XML diff 모드를 나열한 것은 다름 엑셀 문서에서 더 마음에 드는 다른 툴을 사용해 본 적이 없기 때문입니다.
나는 두 개의 파일에서 오픈오피스의 문서 비교 기능을 호출할 오픈오피스 매크로를 찾았습니다.안타깝게도, 오픈오피스의 스프레드시트 비교는 약간 엉성해 보입니다. 저는 방금 '모두 거부' 버튼으로 제 문서에 불필요한 열을 삽입했습니다.
SVN용 xdocdiff 플러그인
만약 당신이 자바를 사용하고 있다면, 당신은 심플 엑셀을 시도할 수 있습니다.
Hamcrest 매칭기를 사용하여 스프레드시트를 다르게 만들고 다음과 같은 것을 출력합니다.
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)
저는 우리가 그 도구를 썼다는 것을 인정해야 합니다(표기된 답변이 그들 자신의 것을 굴린 것처럼).
거북이가 있다면,그런 다음 SVN에서 두 파일을 클릭하여 Windows 탐색기에서 선택한 다음 마우스 오른쪽 단추를 클릭합니다.SVN->Diff.
이 기능은 대용량 데이터 세트에서 작은 변화를 찾는 경우 특히 유용합니다.
저도 당신처럼 문제가 생겨서 작은 도구를 써서 도움을 주기로 했습니다.ExcelDiff_를 확인하십시오.툴에는 다음과 같은 몇 가지 핵심 사항이 포함됩니다.
- xls, xlsx, xlsm을 지원합니다.
- 포뮬러 셀로.공식과 값을 모두 비교합니다.
- UI를 수정, 삭제, 추가, 변경되지 않은 상태의 표준 diff 텍스트 뷰어처럼 만들려고 합니다.아래 이미지를 예로 들어 보십시오.
저는 무료 오픈 소스 Git 확장의 공동 저자입니다.
https://github.com/ZoomerAnalytics/git-xltrail
이를 통해 Git는 해결 방법 없이 Excel 워크북 파일 형식으로 작동합니다.
Diff Doc이 당신이 찾고 있는 것일 수도 있습니다.
- MS Word(DOC, DOCX 등), Excel, PDF, RTF(Rich Text), 텍스트, HTML, XML, PowerPoint 또는 Wordperfect의 문서를 비교하고 형식을 유지합니다.
- 문서(파일)의 임의 부분을 선택하고 동일하거나 다른 문서(파일)의 임의 부분과 비교합니다.
툴에 대해서는 잘 모르지만, 생각나는 롤 유어 온 솔루션은 두 가지가 있습니다. 둘 다 Excel이 필요합니다.
두 워크북의 각 워크시트, 행, 열 및 셀을 단계별로 구분하여 차이점을 보고하는 VBA 코드를 작성할 수 있습니다.
Excel 2007을 사용하는 경우 워크북을 Open-XML(*.xlsx) 형식으로 저장하고 XML을 추출한 후 이를 변경할 수 있습니다.Open-XML 파일은 기본적으로 .xml 파일 및 매니페스트의 .zip 파일에 불과합니다.
처음부터 스프레드시트가 구조적으로 "가까운" 상태가 아니라면 두 경우 모두 많은 "소음"이 발생하게 됩니다.
cvs로 변환한 다음 버전 제어 시스템에 업로드한 다음 고급 버전 제어 diff 도구로 diff합니다.제가 퍼포스를 사용했을 때, 그것은 훌륭한 디프 툴을 가지고 있었지만, 저는 그것의 이름을 잊어버렸습니다.
제가 하게 된 일은 다음과 같습니다.openpyxl
), 이전에 접근한 방법을 기반으로 합니다.git-diffing
PowerPoint 파일.또한 BeyondCompare:
"""
Setup -- Add these lines to the following files:
--- .gitattributes
*.xlsx diff=xlsx
--- .gitconfig (or repo\.git\config or your_user_home\.gitconfig) (change the path to point to your local copy of the script)
[diff "xlsx"]
binary = true
textconv = python C:/Users/myUserName/Miniconda3/Scripts/git-xlsx-textconv.py
[difftool "xlsx"]
cmd = t1=`mktemp` && `python C:/Users/myUserName/Miniconda3/Scripts/git-xlsx-textconv.py $LOCAL >$t1` && t2=`mktemp` && `python C:/Users/myUserName/Miniconda3/Scripts/git-xlsx-textconv.py $REMOTE >$t2` && "C:/Program\\ Files/Beyond\\ Compare\\ 4/BCompare.exe $t1 $t2" && rm -f $t1 $t2
usage:
git diff your_excel.xlsx
git difftool --tool xlsx your_excel.xlsx
"""
import sys
from openpyxl import load_workbook
if __name__ == '__main__':
if len(sys.argv) != 2:
print("Usage: git-xlsx-textconv file.xslx")
path_to_excel = sys.argv[1]
wb = load_workbook(filename=path_to_excel, read_only=True)
for sn in wb.sheetnames:
ws = wb[sn]
par_text = b'#<'
par_text += sn.encode('utf-8')
par_text += b'>#\n'
rows = []
for row in ws.rows:
rowtext = b''
is_empty = True
for cell in row:
s = '' if cell.value is None else str(cell.value).strip()
s = s.replace("\\", "\\\\")
s = s.replace("\n", " ")
s = s.replace("\r", " ")
s = s.replace("\t", " ")
s = s.replace('\r\n', ' ')
s = s.rstrip('\r\n')
s = s.rstrip(r'')
# Convert left and right-hand quotes from Unicode to ASCII
# found http://stackoverflow.com/questions/816285/where-is-pythons-best-ascii-for-this-unicode-database
# go here if more power is needed http://code.activestate.com/recipes/251871/
# or here https://pypi.python.org/pypi/Unidecode/0.04.1
punctuation = { 0x2018:0x27, 0x2019:0x27, 0x201C:0x22, 0x201D:0x22 }
s.translate(punctuation).encode('ascii', 'ignore')
s = s.encode('utf-8')
if s:
is_empty = False
rowtext += s
rowtext += b'|'
rows.append((rowtext, is_empty))
rows_new = []
non_emtpy_seen = False
num_empties_at_end_of_sheet = 0
# now figure out if there's a bunch of "empty" rows at the end of the sheet
for r in reversed(rows):
text, is_empty = r
if is_empty and not non_emtpy_seen:
num_empties_at_end_of_sheet+=1
continue
non_emtpy_seen = True
rows_new.append(text)
rows_new = list(reversed(rows_new))
par_text += b'\n'.join(rows_new)
if num_empties_at_end_of_sheet:
par_text += f'\n<... and {num_empties_at_end_of_sheet} empty rows that are not shown...>\n'.encode('utf8')
par_text += b'\n'
print(par_text.decode('utf8'))
언급URL : https://stackoverflow.com/questions/114698/how-do-i-create-a-readable-diff-of-two-spreadsheets-using-git-diff
'programing' 카테고리의 다른 글
예약된 Sql 키워드를 사용하여 명명된 테이블 열을 처리하는 방법 (0) | 2023.07.14 |
---|---|
"self.x = x; self"를 피하려면 어떻게 해야 합니까?y = y; __init_의 self.z = z" 패턴? (0) | 2023.07.14 |
sig_atomic_t는 실제로 어떻게 작동합니까? (0) | 2023.07.14 |
Firebase 데이터베이스에서 데이터를 검색하는 방법은 무엇입니까? (0) | 2023.07.14 |
Xcode에 개발팀이 표시되지 않습니다. (0) | 2023.07.14 |