使用Excel的com组件加载一个模板(模板里面有vba脚本),直接SaveAs的话就不会加载vba脚本。

解决方案 »

  1.   

    什么意思?你的意思说,VBA没有保存到新的workbook里?
      

  2.   

    下面的是一个小例子。加载一个WeekReportTemplate.xls模板(模板里面有vba脚本),然后另存为指定路径(strAppPath)。打开strAppPath后,里面的vba脚本没了,会弹出一个警告对话框:无法未启用宏的工作簿中保存以下功能。            string strFilePath = "F:\\WeekReportTemplate.xls";
                string strTicks = DateTime.Now.Ticks.ToString();
                string strAppPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
                strAppPath += strTicks + ".xls";
                Microsoft.Office.Interop.Excel.Application WKTExcelObj = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbooks WKTWorkbooks = WKTExcelObj.Workbooks;
                Microsoft.Office.Interop.Excel.Workbook WKTWorkbook = WKTWorkbooks.Add(strFilePath);
                Microsoft.Office.Interop.Excel.Sheets WKTWorkSheets = WKTWorkbook.Worksheets;
                Microsoft.Office.Interop.Excel.Worksheet WKTWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)(WKTWorkSheets.get_Item(1));
                string strListValue = "1,2,3";
                object ObjOpt = System.Reflection.Missing.Value;
                WKTWorkbook.SaveAs(strAppPath, ObjOpt, ObjOpt, ObjOpt,
                ObjOpt, ObjOpt, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
                ObjOpt, ObjOpt, ObjOpt, ObjOpt, ObjOpt);
                WKTWorkbook.Close(false, ObjOpt, ObjOpt);
                WKTExcelObj.Quit();
      

  3.   

    测试了下没啥问题呢
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Excel = Microsoft.Office.Interop.Excel;namespace SaveAsWithVBA
    {
        class Program
        {
            static void Main(string[] args)
            {
                var xlsApp = new Excel.Application();
                xlsApp.DisplayAlerts = false;
                var xlsBook = xlsApp.Workbooks.Open(@"E:\Programming\1.xls");
                xlsBook.SaveAs(@"E:\Programming\2.xls");
                xlsBook.Close(false);
                xlsApp.DisplayAlerts = true;
                xlsApp.Quit();
            }
        }
    }
      

  4.   

    这份代码当然没有问题,不过你用的是Open,我用的是add,多次打开时会出现其他的只能以只读的方式打开,虽然说这也可以使用拷贝文件的方式实现目的。
      

  5.   

    那可不么,vba如果只存在template里...