2008-10-03 2 views
3

Excel VBA 기능에서 파일을 GZip으로 압축 할 수 있어야합니다. 특히 'deflate'알고리즘을 사용할 수 있어야합니다..xla 파일의 코드 만 사용하여 Excel VBA에서 파일을 GZip으로 압축하는 방법은 무엇입니까?

명령 줄 응용 프로그램을 실행하지 않고도이 작업을 수행 할 수 있습니까? 외부 도구에 대한 의존성이 없어 코드가 더욱 강력해질 것입니다.

가 이상적으로 코드가 사전 설치된 VBA 또는 COM 라이브러리 함수의 사용을 만들 것 - 내가 함수의 설치를 원하는이 논리 나 자신을 구현하거나 등

가능하면 DLL을 설치해야하고 싶지 않아 사용 가능한 Excel 추가 기능에 .xla를 추가하는 것만 큼 간단합니다. DLL, EXE, 레지스트리 항목 등은 필요하지 않습니다.

편집이 작업을 수행하려면 .NET GZipStream을 사용할 수 있습니까?

+0

Windows 용 Excel에서 실행해야합니다. '라이브러리'란 VBA에서 액세스 할 수있는 함수 또는 COM 객체를 의미합니다. –

+0

GPL 없음, 걱정됩니다 –

답변

4

VBA (실제로 VB6의 사투리)는 이러한 종류의 응용 프로그램에는 느립니다. 한때 Shannon-Fano 알고리즘을 VB6과 C에서 구현 했었다는 것을 기억합니다. C 버전은 DLLMain으로 바꾼 후에도 약 10 배 더 빠르며 명령 줄 실행 파일보다는 호출됩니다.

오픈 소스와 셰어웨어 모두 압축 서비스를 제공하는 COM DLL이 많이 있으며 그 중 일부는 GZIP의 수축 알고리즘을 구현합니다. VBA 코드에서 이러한 DLL의 함수 하나를 호출하여 사용자를 대신하여 압축을 수행하는 것은 매우 간단합니다.

귀하의 애플리케이션에 외부 사용에 꺼려한다는 것을 이해합니다.이 경우 성능을 위해 예외를 적용해야 할 수도 있습니다.

재미를 완전히 망치려면 windows \ system32에서 ZIPFLDR.DLL 파일을 검사하십시오.

은 인터넷 검색을 통해 모두 발견 , 당신은 더/더 좋은 예를 찾을 수 있어야합니다.

+0

이 기능을 제공하는 기본 제공 (즉, Windows 또는 Excel의 일부로 Microsoft에서 제공) COM 라이브러리가 있습니까? –

+0

예, Windows에는 ZIP 스타일 압축을 제공하는 COM 라이브러리가 제공됩니다. 여기에는 deflate 알고리즘이 포함되어 있습니다. 비록 생성 된 바이너리 파일이 GZIP와 다른 포맷을 가지고 있기 때문에 동일한 알고리즘이라 할지라도 파일의 압축을 풀 수는 없습니다. –

+0

Windows COM 라이브러리에 대한 자세한 정보를 제공 할 수 있습니까? 비호 환성은 언급되었지만 그것이 내가 원하는 것을 할 수도 있습니다. –

0

VBA에서 알고리즘을 구현하려면 (VBA에서) 스프레드 시트를 저장 한 다음 VB의 I/O 함수를 사용하여 파일을 열고 압축을 해제 한 다음 다시 저장해야합니다. 모든 의도와 목적을 위해 파일에서 작동하는 일반 VB 응용 프로그램을 작성하는 것과 동일합니다. "파일 사용 중"유형의 오류를 피하기 위해 별도의 통합 문서에 VBA 매크로를 넣어야 할 수도 있습니다. 그러나 파일을 읽기 전용으로 다시 열고 다른 파일 이름으로 저장하면 모든 통합 문서를 유지해야합니다.

하지만 VBA 내에서 gzip으로 포격하는 것이 기능적으로 동일하고 무한히 쉬울 것이라는 확신은 거의 확실합니다.

편집 : 일부 코드. 그것을 실행할 때 실패하지 않았으므로 모든 것을 같은 통합 문서에 보관하는 것이 좋습니다.

Sub main() 
    ActiveWorkbook.Save 
    Open "macrotest.xls" For Binary Access Read As #1 
    Open "newfile.zip" For Binary Access Write As #2 
     'do your stuff here 
    Close #2 
    Close #1 
End Sub 
0

와인 한병을 열고 싶은데 병따개 사용을 거부합니다. 파일의 GZipping을 허용하는 VBA 기능이 없으면 dll이나 exe 파일과 같은 외부 소스없이 작업을 수행 할 수 없습니다.

+0

이 기능을 제공하는 기본 제공 (즉, Windows 또는 Excel의 일부로 Microsoft에서 제공) COM 라이브러리가 있습니까? –

3

좋아요, 답장을 보내 주셨습니다.

zlib는 구현하고 싶지 않은 수축 알고리즘을 작성한 사람이 작성한 라이브러리입니다. Win32 DLL을 사용할 수 있습니다. 다음은 Windows에서 그것을 사용에 관한 질문입니다 :

http://www.zlib.net/DLL_FAQ.txt

저자는 Windows 사용자에 너무 열중하지 않는 것, 그리고 VB 사용자에 전혀 치열하지만 오래하지 않는 것 질문 7. 아웃 그들은 우리가 나머지를 할 수있는 도서관을 제공 할 정도로 친절합니다.

이것이 도움이 될만한 것이 있다면 큰 것입니다. VBA에서 C 라이브러리를 호출하는 데 도움이 필요하면 주석을 추가하면 알아낼 수 있습니다. 나는 VB에서 C로 전화를 몇 년 동안 해본 적이 없다. 재미있을 것 같다.

0

누군가 타사 소프트웨어에 의존하지 않고 파일을 압축하려는 경우 일반적으로 COM 개체/DLL로 구현하므로 Excel 이외의 다른 곳에서도 사용할 수 있습니다. 누군가가 zip 기능을 Excel에 통합하고자한다면 타사 도구를 사용하여 알고리즘을 다시 구현하지 않아도됩니다. 그래서 당신은 조류에 대항하여 수영하고 있습니다. 그러나 ...

http://www.cpearson.com/excel/SaveCopyAndZip.htm

는 두 가지 버전이 있습니다. COM 추가 기능 버전 "...을 사용하면 디스크에 저장된 통합 문서를 압축 할 수 있습니다 (단, 저장되지 않은 상태 일 수 있음)." Moonlight Software 구성 요소를 사용하지만 모든 구성 요소와 설정은 설치 프로그램에 포함되어 있습니다. 꽤 공개 된 것은 아니지만 라이센스는 GPL보다 덜 제한적입니다. 최종 결과는 타사 구성 요소를 사용하는 Excel 추가 기능입니다.

외부 도구에 대한 의존성을 정말로 원하지 않는다면 직접 압축 알고리즘을 구현하거나 Microsoft에서 해당 기능을 Windows에 빌드하고 Excel을 통해 노출 할 때까지 기다려야합니다.

이 정보가 도움이되기를 바랍니다.