كيف يمكنني GZip ضغط ملف من Excel VBA باستخدام التعليمات البرمجية في .الملف xla فقط ؟

StackOverflow https://stackoverflow.com/questions/167888

سؤال

أنا بحاجة إلى أن تكون قادرة على GZip ضغط ملف في Excel VBA وظيفة.على وجه التحديد لا تحتاج إلى أن تكون قادرة على استخدام 'فرغ' الخوارزمية.

هل هناك طريقة للقيام بذلك دون الحاجة إلى exec سطر الأوامر ؟ مع عدم الاعتماد على أدوات خارجية المدونة سوف تكون أكثر قوة.

من الناحية المثالية رمز من شأنها أن تجعل استخدام من قبل تثبيت VBA أو مكتبة COM وظائف - أنا لا أريد أن تنفيذ هذا المنطق نفسي أو تثبيت DLLs.... الخ

إذا ممكن أريد تركيب وظيفة أن تكون بسيطة مثل إضافة .xla المتاحة Excel الإضافية.لا DLLs السابقين ، إدخالات التسجيل.... الخالمطلوبة.

تحرير هل يمكنني الاستفادة من .صافي GZipStream أن تفعل هذا ؟

هل كانت مفيدة؟

المحلول

VBA (الذي هو في الحقيقة لهجة من VB6) هو البطيء لهذا النوع من التطبيقات.أذكر أنني ذات مرة تنفيذها شانون-فانو الخوارزمية على VB6 و C ، C الإصدار كان حوالي 10 مرات أسرع ، حتى بعد أن تحولت إلى DLLMain ودعا من هناك بدلا من سطر الأوامر القابلة للتنفيذ.

وهناك الكثير من COM Dll التي توفر ضغط الخدمات ، سواء مفتوحة المصدر و كومبيوتري ، ومنهم من تنفيذ GZIP يدحض الخوارزمية.سيكون حقا بسيطة فقط اتصل وظيفة واحدة من هذه DLL من التعليمة البرمجية الخاصة بـ VBA للقيام ضغط نيابة عنك.

أنا أتفهم يجري مترددة في استخدام شيء خارجي التطبيق الخاص بك, على الرغم من أن في هذه الحالة قد تحتاج إلى تقديم طلب استثناء الأداء السماء.

في محاولة تماما يفسد متعة الخاص بك ، دراسة الملف ZIPFLDR.DLL على windows\system32.قد ترغب أيضا في إلقاء نظرة على هذه الروابط:

على حد سواء من خلال البحث في قوقل, يجب أن تكون قادرة على العثور على أكثر/أفضل الأمثلة على ذلك.

نصائح أخرى

حسنا, أعتقد أن لدي إجابة لك.

zlib مكتبة كتب بواسطة الرجل الذي كتب وفرغ خوارزمية كنت لا تريد أن تنفذ.هناك win32 DLL المتاحة.هنا أسئلة وأجوبة حول استخدامه من ويندوز:

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

تحقق من السؤال 7.الكتاب لا تبدو حريصة جدا على مستخدمي ويندوز و لا يبدو على الإطلاق حريصة على VB المستخدمين ، ولكن طالما انهم نوع ما يكفي لتزويد المكتبة يمكننا أن تفعل بقية.

إذا كان هذا هو ما يكفي لمساعدتك ، ثم كبيرة.إذا كنت تريد مساعدة مع استدعاء ج المكتبة من VBA إضافة تعليق ونحن سوف الرقم بها.أنا لم تفعل أي VB-إلى-ج المكالمات في السنوات ... هذا يبدو وكأنه متعة.

يبدو أنك تريد فتح زجاجة من النبيذ لكنك بالتأكيد يرفضون استخدام زجاجة فتاحة.طالما لا يوجد VBA وظيفة السماح gzipping والمساعد الملف سوف لا تكون قادرة على القيام بهذه المهمة دون بعض الخارجي ريسورس مثل dll أو exe file.

إذا أراد شخص ما ضغط الملفات دون الاعتماد على 3rd الطرف البرمجيات عادة ما تنفذ على أنها كائن COM/DLL لذلك ستكون متاحة أكثر من مجرد Excel.إذا كان شخص ما تريد إدراج الرمز البريدي وظائف في Excel أنها ستستخدم 3-أدوات الطرف حتى لا تضطر إلى إعادة تنفيذ الخوارزمية.حتى أنك تسبح ضد التيار.ومع ذلك...

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

هناك نوعان من الإصدارات.إضافة COM-في نسخة "...يسمح لك الرمز البريدي أي المصنف التي تم حفظها إلى القرص (ولكن قد يكون في غير محفوظة الدولة)." لأنه يعتمد على القمر مكون من مكونات البرنامج ولكن جميع عناصر الإعداد الموجودة في المثبت.ليس المجال العام ولكن الترخيص أقل تقييدا من GPL.والنتيجة النهائية هي Excel الوظيفة الإضافية (التي تستخدم 3rd الطرف المكونات).

ولكن إذا كنت حقا لا تريد أي تبعيات على أدوات خارجية إما أن يكون تنفيذ خوارزمية ضغط نفسك أو الانتظار حتى مايكروسوفت يبني هذه الوظيفة في ويندوز و يعرض من خلال Excel.

آمل أن يساعد هذا.

إذا كنت ترغب في تنفيذ الخوارزمية في VBA, سوف تحتاج إلى (في VBA) حفظ جدول البيانات ثم استخدام VB وظائف I/O لفتح ملف فرغ منه ، وحفظه مرة أخرى.لجميع النوايا والمقاصد انها متطابقة إلى كتابة عادية VB التطبيق الذي يعمل على الملف.قد تحتاج إلى وضع ماكرو VBA في مصنف منفصل لتجنب "ملف قيد الاستخدام" أنواع الأخطاء ، ولكن إذا قمت بإعادة فتح ملف للقراءة فقط وحفظه مع اسم ملف مختلف يجب أن تكون موافق حفظ كل شيء في مصنف واحد.

ولكن أنا على يقين تقريبا هذا القصف إلى gzip من داخل VBA ستكون متطابقة وظيفيا بشكل أسهل.

تحرير: بعض التعليمات البرمجية.لم تفشل عندما ركضت ذلك, لذلك لا بأس أن نضع كل شيء في نفس المصنف.

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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top