2016-02-12 88 views
1

在我的電子表格中,參考點(28,9)處的單元格包含超鏈接。該代碼然後將該單元格的內容複製到同一電子表格中的另一個工作表。現在它將複製文本,但新單元只包含文本而不包含超鏈接屬性。有沒有辦法通過傳輸來保留超鏈接?我嘗試查找超鏈接信息,但找不到答案......或者至少不是我理解的那個。我只有約2周的編碼,所以還是不太瞭解。這裏是我的代碼:使用JS將單元格中的鏈接複製到另一個表格時,保留超鏈接URL

function submitButtonClick() { 
 
    
 
    var ss = SpreadsheetApp.getActive(); 
 
    var sheet = ss.getActiveSheet(); 
 
    
 
    Logger.log('sheet.getName(): ' + sheet.getName()); 
 
    
 
    
 
    if (sheet.getName() !== "SubmitReceipt") {return;}; 
 
    
 
    var targetSheet = ss.getSheetByName("ReceiptRecord"); 
 
    
 
    var arrayOfData = []; 
 
    
 
    var week = sheet.getRange(6,9).getValue(); 
 
    var emplN = sheet.getRange(4,9).getValue(); 
 
    var purDate = sheet.getRange(9,9).getValue(); 
 
    var purFrom = sheet.getRange(11,9).getValue(); 
 
    var custC = sheet.getRange(14,9).getValue(); 
 
    var deptC = sheet.getRange(16,9).getValue(); 
 
    var lotC = sheet.getRange(18,9).getValue(); 
 
    var laborC = sheet.getRange(20,9).getValue(); 
 
    var itemC = sheet.getRange(22,9).getValue(); 
 
    var hyperL = sheet.getRange(28,9).getValue(); 
 
    var notes = sheet.getRange(44,8).getValue(); 
 
    
 
    arrayOfData[0] = week; 
 
    arrayOfData[1] = emplN; 
 
    arrayOfData[2] = purDate; 
 
    arrayOfData[3] = purFrom; 
 
    arrayOfData[4] = custC; 
 
    arrayOfData[5] = deptC; 
 
    arrayOfData[6] = lotC; 
 
    arrayOfData[7] = laborC; 
 
    arrayOfData[8] = itemC; 
 
    arrayOfData[9] = notes; 
 
    arrayOfData[10] = hyperL; 
 
    
 
    Logger.log('arrayOfData '+ arrayOfData) 
 
    
 
    var lastRow = targetSheet.getLastRow(); 
 
    
 
    Logger.log('lastRow: ' + lastRow); 
 
    Logger.log('arraylength ' + arrayOfData.length); 
 
    
 
    targetSheet.getRange(lastRow+1, 1, 1, arrayOfData.length).setValues([arrayOfData]); 
 

 

 
    sheet.getRange(9,9).clearContent(); 
 
    sheet.getRange(11,9).clearContent(); 
 
    sheet.getRange(14,9).clearContent(); 
 
    sheet.getRange(16,9).clearContent(); 
 
    sheet.getRange(18,9).clearContent(); 
 
    sheet.getRange(20,9).clearContent(); 
 
    sheet.getRange(22,9).clearContent(); 
 
    sheet.getRange(28,9).clearContent(); 
 
    sheet.getRange(44,8).clearContent(); 
 
    
 
} 
 

預先感謝您的幫助。

更新:我找到了一個可能的解決方案並嘗試了它,但隨後發生了錯誤「TypeError:無法在對象Sample Receipt 6.jpg中找到函數getFormulaR1C1(第26行,」提交到記錄「文件)

這裏是更新的26行顯示新的解決方案,我試過:再次

var url = hyperL.getFormulaR1C1();

感謝您的幫助。

回答

1

我想通了。注意「//更改」註釋之間的差異。

function submitButtonClick() { 
 
    
 
    var ss = SpreadsheetApp.getActive(); 
 
    var sheet = ss.getActiveSheet(); 
 
    
 
    Logger.log('sheet.getName(): ' + sheet.getName()); 
 
    
 
    
 
    if (sheet.getName() !== "SubmitReceipt") {return;}; 
 
    
 
    var targetSheet = ss.getSheetByName("ReceiptRecord"); 
 
    
 
    var arrayOfData = []; 
 
    
 
    var week = sheet.getRange(6,9).getValue(); 
 
    var emplN = sheet.getRange(4,9).getValue(); 
 
    var purDate = sheet.getRange(9,9).getValue(); 
 
    var purFrom = sheet.getRange(11,9).getValue(); 
 
    var custC = sheet.getRange(14,9).getValue(); 
 
    var deptC = sheet.getRange(16,9).getValue(); 
 
    var lotC = sheet.getRange(18,9).getValue(); 
 
    var laborC = sheet.getRange(20,9).getValue(); 
 
    var itemC = sheet.getRange(22,9).getValue(); 
 
    var hyperL = sheet.getRange(28,9).getValue(); 
 
    var notes = sheet.getRange(44,8).getValue(); 
 
    
 
    
 
    
 
    
 
    //Changes 
 
    
 
    var range = SpreadsheetApp.getActiveSheet().getRange(28,9,1,3); 
 
    
 
    Logger.log('range= ' + range.getValue()); 
 
    
 
    Logger.log('hyperlink: ' + range.getFormulaR1C1()); 
 
    
 
    var url = /"(.*?)"/.exec(range.getFormulaR1C1())[1]; 
 
    
 
    Logger.log('url: ' + url); 
 
    
 
    //Changes 
 
    
 
    
 
    
 
    arrayOfData[0] = week; 
 
    arrayOfData[1] = emplN; 
 
    arrayOfData[2] = purDate; 
 
    arrayOfData[3] = purFrom; 
 
    arrayOfData[4] = custC; 
 
    arrayOfData[5] = deptC; 
 
    arrayOfData[6] = lotC; 
 
    arrayOfData[7] = laborC; 
 
    arrayOfData[8] = itemC; 
 
    arrayOfData[9] = notes; 
 
    arrayOfData[10] = hyperL; 
 
    arrayOfData[11] = url; 
 
    
 
    Logger.log('arrayOfData '+ arrayOfData) 
 
    
 
    var lastRow = targetSheet.getLastRow(); 
 
    
 
    Logger.log('lastRow: ' + lastRow); 
 
    Logger.log('arraylength ' + arrayOfData.length); 
 
    
 
    targetSheet.getRange(lastRow+1, 1, 1, arrayOfData.length).setValues([arrayOfData]); 
 

 

 
    sheet.getRange(9,9).clearContent(); 
 
    sheet.getRange(11,9).clearContent(); 
 
    sheet.getRange(14,9).clearContent(); 
 
    sheet.getRange(16,9).clearContent(); 
 
    sheet.getRange(18,9).clearContent(); 
 
    sheet.getRange(20,9).clearContent(); 
 
    sheet.getRange(22,9).clearContent(); 
 
    sheet.getRange(28,9).clearContent(); 
 
    sheet.getRange(44,8).clearContent(); 
 
    
 
} 
 

+1

代替代碼個體線每一個值的,則可以創建行的陣列來獲得:'VAR arrayRowsToGet = [6,4,9,11,14,16,18 ,等];然後遍歷該數組:'var thisLoopValue =「」,theCellValue; for(var i = 0; i