2014-05-05 145 views
0

當路徑聲明爲絕對路徑時,此代碼片段正常工作。考慮行絕對路徑到相對路徑的轉換

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; 
+0

是的,它的Windows腳本主機 – user3444944

回答

1

Windows腳本宿主部分的東西讓你可以使用相對於當前目錄的路徑,這將是你啓動腳本的目錄。如果你從命令行啓動它,那麼它當然會是命令行中的當前目錄。如果通過雙擊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,因此無論認爲當前目錄是什麼,它都可以找到它。

+0

我不認爲這會有所幫助。請幫助我編寫相同路徑的語法。謝謝 ! – user3444944

+0

@ user3444944:您只需使用相對路徑,就像您在其他地方那樣。我指出**是相對的**。如果你在'c:\ temp'中並且你想訪問'c:\ temp \ temp.csv',那麼相對路徑是'temp.csv'。但是如果你在(比如說)'c:\ somewhere_else_completely'中,那麼當然相對路徑是'\ temp \ temp.csv'。如果你在'd:\ yet_another_place'那裏**有**沒有文件的相對路徑(呃,禁止每個驅動器上的命令行當前目錄),所以你需要'c:\ temp \ temp .csv'。 –

+0

我嘗試使用相對路徑,就像你提到的,但它似乎並沒有這樣工作。什麼可以是替代解決方案? – user3444944