باستخدام Interop مع C#، يقوم Excel بحفظ تغيير الأصل.كيفية نفي هذا؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

المشكلة:تحميل قالب جدول بيانات Excel.استخدام أمر الحفظ باسم ملف مختلف ثم إنهاء كائن التشغيل المتداخل.ينتهي هذا بحفظ ملف القالب الأصلي.ليست النتيجة التي تحبها.

public void saveAndExit(string filename)
{        
    excelApplication.Save(filename);
    excelApplication.Quit();
}

الملف الأصلي الذي تم فتحه هو c: testing template.xls اسم الملف الذي تم تمريره هو c: testing 7777 (date) .xls

هل لدى أحد إجابة؟

(الإجابة التي اخترتها كانت الأكثر صحة ودقة على الرغم من أن wbk.Close() يتطلب تمرير المعلمات إليها.شكرًا.)

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

المحلول

يعد التشغيل المتداخل لبرنامج Excel مؤلمًا جدًا.لقد استخرجت مشروعًا قديمًا كان لدي، وقمت ببعض العبث، وأعتقد أن هذا هو ما تبحث عنه.المعلقون الآخرون على حق، ولكن، على الأقل في تجربتي، هناك الكثير لاستدعاء SaveAs() أكثر مما تتوقع إذا كنت قد استخدمت نفس الكائنات (بدون غلاف التشغيل المتداخل) في VBA.

Microsoft.Office.Interop.Excel.Workbook wbk = excelApplication.Workbooks[0];  //or some other way of obtaining this workbook reference, as Jason Z mentioned
wbk.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing);
wbk.Close();
excelApplication.Quit();

يجب أن أحب كل تلك النوعيات المفقودة.لكنني أعتقد أنها ضرورية.

نصائح أخرى

بدلاً من استخدام ExcelApplication، يمكنك استخدام كائن Workbook واستدعاء الأسلوب SaveAs().يمكنك تمرير اسم الملف المحدث هناك.

هل جربت SaveAs من ورقة العمل؟

  1. كما سبق على SaveAs
  2. كلما اضطررت إلى إجراء Interop، أقوم بإنشاء مكتبة فئة VB.NET منفصلة وأكتب المنطق في VB.لا يستحق الأمر عناء القيام بذلك في C#
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top