سؤال

أحاول إنشاء بناء السيناريو الحالي من المشروع الذي يتضمن Excel الوظيفة الإضافية.الوظيفة الإضافية يحتوي على VBProject مع ملف modGlobal مع متغير version_number بنية.هذا الرقم يحتاج إلى تغيير كل بناء.بالضبط الخطوات التالية:

  1. فتح XLA الوثيقة مع Excel.
  2. التبديل إلى VBEditor الوضعية.(Alt+F11)
  3. فتح VBProject, إدخال كلمة مرور.
  4. فتح modGlobal الملف.
  5. تغيير متغير القيمة الافتراضية إلى التاريخ الحالي.
  6. إغلاق وحفظ المشروع.

أنا في حيرة عن كيفية أتمتة العملية.أفضل ما يمكن أن تأتي مع ماكرو 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 عن تطبيقات للتوسعة..' المكون.

أمثلة على رقاقة بيرسون موقع ممتاز يجب الحصول على انك بدأته.

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