2017-11-29 8 views
0

큰 DB에서 데이터를 추출하고 가독성을 높이기 위해 (조건부) 서식과 함께 Excel 파일로 출력하는 도구를 작성했습니다. 이를 위해 리눅스 머신에서 openpyxl으로 파이썬을 사용합니다. 그것은 훌륭하게 작동하지만이 패키지는 Excel 작성에 다소 느립니다.Excel에서 CSV를 임베드하여 데이터 가져 오기

(압축 된) CSV로 테이블을 덤프하고 Excel로 가져 와서 매크로/vba를 사용하여 서식을 적용하는 것이 훨씬 더 빠른 것처럼 보입니다.

프로세스를 자동화하려면 포맷을 수행하는 데 필요한 VBA가 미리로드 된 빈 Excel 파일을 만들고 싶습니다. 템플릿. 모든 데이터 덤프에 대해 데이터는 Excel 파일에 포함되고 (압축을 사용하여 압축 됨) 문서를 열 때 통합 문서에로드됩니다 (또는 매크로 관련 보안 작업을 회피하기 위해 "LOAD"단추 사용). 열 때

그러나, 단지 Excel 파일에 일부 파일을 추가하면 오류가 발생합니다 :

우리는 'Werkmap1_test_embed.xlsx'의 일부 내용에 문제가 있음을 발견했다. 우리가 최대한 많이 복구하기를 원합니까? 이 통합 문서의 원본을 신뢰하는 경우 예를 클릭하십시오.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> 
    <logFileName>Repair Result to Werkmap1_OLE_Word0.xml</logFileName> 
    <summary>Errors were detected in file '/Users/joostk/mnt/cluster/Werkmap1_OLE_Word.xlsx'</summary> 
    <additionalInfo> 
     <info>Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded.</info> 
    </additionalInfo> 
</recoveryLog> 

가이 문제를 방지 할 수있다 :

Yes이 파일을 열고 XML과 같은 일부 추적 정보를 보여줍니다 클릭? Excel ZIP에 파일을 어떻게 포함합니까? 일부 파일 테이블을 업데이트해야합니까 (필자는 쉽게 파일을 열 수 없습니다).

끝나면 데이터를 가져오고 싶습니다. Excel ZIP 파일을 VBA에서 액세스 할 수 있습니까? 나는 추측하지 않으며, 데이터를 임시 경로로 추출하여 거기에서로드해야합니다.

나는 우편 및 일반 텍스트를로드 할 곳이 도움이 해답을 발견 :

많은 감사 의견을 공유!

+0

"Excel에서 읽을 수없는 콘텐츠를 발견했습니다 ..."라는 오류가 무엇입니까?둘째, Excel 파일을 열면 "복구 된"모드로 열립니다. 마지막으로 VBA 코드가 명명 된 범위를 사용하여 데이터를 제공하거나 쓰는 것입니까? – MattR

+0

감사합니다 .MattR. 전체 오류 메시지가 포함되었습니다. Mac 용 Office 2016을 사용하고 있지만 Windows 용 Office에서도 작동해야합니다 (또는 최소한). 아직 VBA 코드를 작성하지 않았습니다. 그러나 아마도 명명 된 범위를 사용하지 않고 CSV를 테이블로 덤프 할 것입니다. –

답변

0

내 "답변"은 네임드 범위 또는 기본 테이블 또는 포함 된 쿼리/연결을 사용하여 발생합니다. 이 파일을 조작하기 시작하면 당신은 당신이 얘기 오류를 얻을 것이다 : "예"를 클릭하고 열려있는 경우

enter image description here

가 파일에 전혀 해가 없습니다. Excel에서 복구 모드로 열면 파일을 다시 저장해야합니다.

이 문제를 해결 한 방법은 "복구 된"파일을 파이썬에서 다시 읽고 다른 파일로 저장하거나 바꾸는 것입니다. 기본적으로은 메모리에 데이터를 다시 읽는 새로운 단계로 추가 작업을 수행하기 만하면됩니다. 오류는 사라질 것입니다. 항상 그렇듯이 프로덕션 환경에 배포하기 전에이 방법을 테스트하여 레코드가 손실되지 않도록하십시오. 내가 해결할 수있는 방법은 두 줄의 pandas이다.

import pandas as pd 
repair = pd.read_excel('PATH_TO_REPAIR_FILE') 
new_file = repair.to_excel('PATH_TO_WHERE_NEW_FILE_GOES') 
+0

다시 한번 @MattR. 불행히도, 이것은 외부 ZIP 프로그램을 사용하여 Excel 아카이브에 추가 된 CSV에 데이터를 저장하려는 경우 작동하지 않습니다. openpyxl에서 이러한 추가 파일을 고려하지 않으므로 pandas (훌륭한 패키지 btw)를 사용하여 Excel 데이터 만 읽고 쓰면 포함 된 CSV가 손실됩니다. 나는 이것을 깨우 치기 위해 나의 질문을 업데이트 할 것이다. –