اكسل:احفظ كملف CSV عبر VBA وينتج عنه ملف مختلف يدويًا

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

  •  26-12-2019
  •  | 
  •  

سؤال

أحتاج إلى حفظ عدة ملفات xlsm بتنسيق CSV لاستيرادها إلى برامج أخرى (مثل R وما إلى ذلك).حسنًا، لقد كتبت إجراءات الاستيراد الضرورية في جميع البرامج الأخرى وهي تعمل بشكل جيد جدًا مع الحالة 1:

حالة 1:حفظ ملف xlsm يدويًا بتنسيق CSVإذا استخدمت هذا الخيار وحفظت كل ملف يدويًا بتنسيق CSV ثم قمت بالنقر فوق "نعم" في جميع المطالبات، فسأحصل على ملف بتنسيق .csv يبدو مشابهًا جدًا لملف Excel العادي عند فتحه مرة أخرى داخل برنامج Excel.إنه عرض عمود قياسي، ولا يوجد شيء مفصول بفواصل وما إلى ذلك.(ربما يكون كذلك، لكنه لا يبدو كذلك..)

الحالة 2:حفظ ملف xlsm من VBA كملف CSVحسنًا، أحصل هنا على ملف مختلف تمامًا عند فتحه مرة أخرى في Excel.يبدو هذا الملف وكأنه ملف CSV "حقيقي" مع فصل جميع القيم بفواصل.

أسئلتي هي:1.لماذا هناك أي فرق؟2.كيف يمكنني الوصول برمجياً إلى الحالة 2 من VBA؟أم أن ذلك مستحيل؟

إذا كان 2 مستحيلًا، فلا بد لي من إعادة كتابة إجراءات كود الاستيراد الخاصة بي للتعامل مع ملف CSV "العادي"... ليس صعبًا للغاية ولكن لا يزال هناك الكثير من العمل وأنا أتساءل حقًا عن سبب وجود فرق..

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

المحلول

س1: لا أعتقد أن هناك فرقًا، على الأقل ليس في المثال الذي جمعته معًا. س2: جرب هذا:

لدي 3 أمثلة لملفات XLSM C:\stack\folder1 كما في الصورة أدناه:

start2

يحتوي كل ملف على ورقة بيانات واحدة، والتي سنحولها إلى ملفات CSV:

start

أنا متأكد من أن روتينك أكثر تعقيدًا، ولكن لاختبار إخراج ملف CSV، سأقوم فقط بتكرار الملفات وحفظ كل منها باسم xlCSV:

Option Explicit
Sub TestCSVOutput()

Dim DataBook As Workbook
Dim DataSheet As Worksheet
Dim FilePaths(3) As String
Dim FileIdx As Long

'set up file paths for test
FilePaths(1) = "C:\stack\folder1\test_file_01.xlsm"
FilePaths(2) = "C:\stack\folder1\test_file_02.xlsm"
FilePaths(3) = "C:\stack\folder1\test_file_03.xlsm"

'loop through array and save each file as a CSV
Application.DisplayAlerts = False
For FileIdx = 1 To UBound(FilePaths)

    Set DataBook = Workbooks.Open(FilePaths(FileIdx))
    Set DataSheet = DataBook.ActiveSheet
    DataBook.SaveAs FileFormat:=xlCSV '<~~ the save step
    DataBook.Close

Next FileIdx
Application.DisplayAlerts = True

End Sub

بمجرد اكتمال البرنامج النصي، سينتهي بي الأمر بثلاثة ملفات CSV:

end2

يتم الفصل بين كل ملف بفواصل عند فتحه في محرر النصوص:

enter image description here

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top