【问题标题】:absolute to relative path conversion绝对到相对路径转换
【发布时间】:2014-05-05 11:04:06
【问题描述】:

当路径声明为绝对路径时,此代码 sn-p 工作正常。考虑这条线

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;

【问题讨论】:

  • 是的,它的 Windows 脚本宿主

标签: excel relative-path absolute-path wsh


【解决方案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,因此无论 it 认为当前目录是什么,它都能找到它。 p>

【讨论】:

  • 我认为这不会有帮助。请帮助我编写相同的相对路径的语法。谢谢!
  • @user3444944:您只需使用相对路径,就像在其他任何地方一样。我是在指出它是相对于 的。如果您在c:\temp 中并且要访问c:\temp\temp.csv,则相对路径为temp.csv。但是如果你在(比如说)c:\somewhere_else_completely,那么相对路径当然是\temp\temp.csv。如果你在d:\yet_another_place 那里没有文件的相对路径(呃,每个驱动器上的命令行当前目录除外),所以你需要c:\temp\temp.csv
  • 我尝试使用你提到的相对路径,但它似乎并没有那样工作。有什么替代解决方案?
  • @user3444944:看起来 Excel 不使用当前目录。我已经更新以展示如何解决这个问题。
  • 还有 1 个问题! excel 工作表使两个选项卡即 temp_pivot 和 Temp 可见。我希望用户只看到 temp_pivot。所以我添加了 Temp.Visible=False 行。但这样做时,它会隐藏 temp_pivot 选项卡并仅显示 Temp 选项卡。现在,如何纠正?
猜你喜欢
  • 2017-08-01
  • 2011-11-07
  • 2011-05-02
  • 2019-08-20
相关资源
最近更新 更多