تغيير .الملف xla مع MSBuild
سؤال
أحاول إنشاء بناء السيناريو الحالي من المشروع الذي يتضمن Excel الوظيفة الإضافية.الوظيفة الإضافية يحتوي على VBProject مع ملف modGlobal مع متغير version_number بنية.هذا الرقم يحتاج إلى تغيير كل بناء.بالضبط الخطوات التالية:
- فتح XLA الوثيقة مع Excel.
- التبديل إلى VBEditor الوضعية.(Alt+F11)
- فتح VBProject, إدخال كلمة مرور.
- فتح modGlobal الملف.
- تغيير متغير القيمة الافتراضية إلى التاريخ الحالي.
- إغلاق وحفظ المشروع.
أنا في حيرة عن كيفية أتمتة العملية.أفضل ما يمكن أن تأتي مع ماكرو excel أو لصناعة السيارات في هذا السيناريو.ويمكن أيضا كتابة مخصص MSBuild المهمة ، ولكن التي قد تحصل...صعبة.لا أحد آخر لديه أي اقتراحات أخرى ؟
المحلول
طريقة بديلة للتعامل مع الإصدارات من الملف XLA هو استخدام خاصية مخصصة في خصائص المستند.يمكنك الوصول إلى والتلاعب باستخدام COM كما هو موضح هنا: http://support.microsoft.com/?kbid=224351.
مزايا هذه هي:
يمكنك فحص رقم الإصدار دون فتح الملف XLA
أنت لا تحتاج إلى التفوق على بناء آلة فقط DsoFile.dll مكون
وثمة بديل آخر لتخزين النسخة رقم (وربما غيرها من بيانات التكوين أيضا) في ورقة عمل في الملف XLA.ورقة العمل قد لا تكون مرئية للمستخدمين من XLA.أسلوب واحد التي استخدمت في الماضي هو متجر إضافة-في ملف XLS في عنصر تحكم مصدر ثم كجزء من عملية البناء (على سبيل المثالفي مرحلة ما بعد بناء الحدث) تشغيل البرنامج النصي أدناه إلى تحويله إلى XLA في الدليل الإخراج.هذا السيناريو يمكن أن تمتد بسهولة إلى تحديث رقم الإصدار في ورقة العمل قبل الحفظ.في حالتي أنا فعلت هذا لأن Excel الوظيفة الإضافية المستخدمة VSTO و Visual Studio لا يدعم XLA الملفات مباشرة.
'
' ConvertToXla.vbs
'
' VBScript to convert an Excel spreadsheet (.xls) into an Excel Add-In (.xla)
'
' The script takes two arguments:
'
' - the name of the input XLS file.
'
' - the name of the output XLA file.
'
Option Explicit
Dim nResult
On Error Resume Next
nResult = DoAction
If Err.Number <> 0 Then
Wscript.Echo Err.Description
Wscript.Quit 1
End If
Wscript.Quit nResult
Private Function DoAction()
Dim sInputFile, sOutputFile
Dim argNum, argCount: argCount = Wscript.Arguments.Count
If argCount < 2 Then
Err.Raise 1, "ConvertToXla.vbs", "Missing argument"
End If
sInputFile = WScript.Arguments(0)
sOutputFile = WScript.Arguments(1)
Dim xlApplication
Set xlApplication = WScript.CreateObject("Excel.Application")
On Error Resume Next
ConvertFileToXla xlApplication, sInputFile, sOutputFile
If Err.Number <> 0 Then
Dim nErrNumber
Dim sErrSource
Dim sErrDescription
nErrNumber = Err.Number
sErrSource = Err.Source
sErrDescription = Err.Description
xlApplication.Quit
Err.Raise nErrNumber, sErrSource, sErrDescription
Else
xlApplication.Quit
End If
End Function
Public Sub ConvertFileToXla(xlApplication, sInputFile, sOutputFile)
Dim xlAddIn
xlAddIn = 18 ' XlFileFormat.xlAddIn
Dim w
Set w = xlApplication.Workbooks.Open(sInputFile,,,,,,,,,True)
w.IsAddIn = True
w.SaveAs sOutputFile, xlAddIn
w.Close False
End Sub
نصائح أخرى
أنا لست متأكدا 100 ٪ كيفية القيام بالضبط ما كنت قد طلبت.ولكن التخمين الهدف لديك في الاعتبار أن هناك بعض الاحتمالات.
1) جعل جزء من (أو كل) من Globals نص منفصل الملفات التي يتم توزيعها مع .XLA وأود أن استخدام هذا للحصول على مراجع خارجية مثل إصدار بقية التطبيق الخاص بك.أكتب هذا في وقت البناء و توزيع و قراءة على الحمل من XLA.
2) أظن كتابة نسخة من المكون الرئيسي (أي:غير XLA) الجزء من التطبيق الخاص بك.إذا كان هذا هو ترو لماذا تخزن في XLA?لماذا لا يكون الجزء الرئيسي من التطبيق يسمح معينة نسخة من XLA العمل.الإصدار 1.1 من التطبيق الرئيسي يمكن قبول المكالمات من الإصدار 7.1 - 8.9 من XLA.
3) إذا كنت تبحث فقط لتحديث XLA حتى يحصل تضمينها في نظام التحكم في الإصدار أو مماثلة (انا التخمين هنا) ربما مجرد لمس الملف بحيث يبدو أنه تغير.
إذا كان إصدار بقية التطبيقات التي كنت السيطرة أود فقط ضعه في ملف نصي و توزيع ذلك جنبا إلى جنب مع XLA.
يمكنك تعديل التعليمات البرمجية في xla برمجيا من داخل Excel.سوف تحتاج إلى الإشارة إلى 'Microsoft Visual Basic عن تطبيقات للتوسعة..' المكون.
أمثلة على رقاقة بيرسون موقع ممتاز يجب الحصول على انك بدأته.