绝对到相对路径转换

时间:2014-05-05 11:04:07

标签: excel relative-path absolute-path wsh

当路径声明为绝对路径时,此代码段正常工作。考虑一下

var wb = xl.Workbooks.Open("C:\\temp\\temp.csv");
代码中的

。但是,我想声明相同的相对路径。我该怎么做?

var xl = new ActiveXObject("Excel.Application");
    xl.Visible = true;
    var wb = xl.Workbooks.Open("C:\\temp\\temp.csv");
    var sheet = wb.ActiveSheet;

    wb.Worksheets.Add(after=wb.Sheets(wb.Sheets.Count));
    var pws = wb.ActiveSheet;
    pws.Name="temp_pivot";
    var pvtTable = pws.PivotTableWizard(1, varSource=wb.sheets("temp").Range("A1").CurrentRegion);
    pvtTable.PivotFields("DECISIONYEAR").Orientation = 1;
    pvtTable.PivotFields("DECISIONMONTH").Orientation = 1;
    pvtTable.PivotFields("WEEKYEAR").Orientation = 1;
    pvtTable.PivotFields("APPLICANT").Orientation = 4;
    pvtTable.PivotFields("SUM OF APPLICANT").Function=-4157;
    pvtTable.PivotFields("APPROVED").Orientation = 4;
    pvtTable.PivotFields("SUM OF APPROVED").Function=-4157;
    pvtTable.PivotFields("SOURCE").Orientation = 3;
    pvtTable.PivotFields("PRODUCTCOLOR").Orientation = 3;
    pvtTable.PivotFields("PRODUCT").Orientation = 3;
    pvtTable.PivotFields("SUB_CHANNEL_CADM").Orientation = 3;
    pvtTable.PivotFields("CHANNEL_CADM").Orientation = 3;
    pvtTable.PivotFields("MARKET").Orientation = 3;
    pvtTable.PivotFields("OFFER_TYPE").Orientation = 3;
    pvtTable.DataPivotField.Orientation=2;
    pws.Columns.Autofit;
    pws.Rows.Autofit;
    xl.DisplayAlerts =0;
    xl.DisplayAlerts = 1
    xl.CutCopyMode = 0;
    xl.EnableEvents = 0;
    xl = null;

1 个答案:

答案 0 :(得分:1)

Windows Scripting Host部分功能允许您使用相对于当前目录的路径,该目录将是您启动脚本的目录。如果从命令行启动它,那么当然它将是命令行中的当前目录。如果通过在Windows资源管理器中双击该文件来启动它,它将是您双击它的目录。

当您以各​​种方式启动文件时,您可以找到当前目录的内容:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var curDir = fso.GetAbsolutePathName(".");
WScript.Echo(curDir);
但是,Excel可能不会默认为同一目录。 (例如,在我的系统上,它默认为用户的文档文件夹。)因此,您需要使用fso.GetAbsolutePathName,然后将绝对路径传递给Excel,如下所示:

var fso = new ActiveXObject("Scripting.FileSystemObject");
var xl = new ActiveXObject("Excel.Application");
xl.Visible = true;
var wb = xl.Workbooks.Open(fso.GetAbsolutePathName("temp.csv"));

这样,虽然您在代码中使用了相对路径,但是您正在向Excel传递绝对路径,因此无论 认为当前目录是什么,它都会找到它。