2016-08-09 62 views
0

我正在構建一個Google Spreadsheet,由於各種原因(主要是因爲我比Excel更擅長使用Excel)需要從CSV文件導入一系列單元格並將它們複製到我的Google Spreadsheet中。從csv文件複製一個範圍到一個Google Spreadsheet

  • 我從複製csv文件被稱爲「WorkFlowDataStore.csv ,我要複製單元格A1:Y1001 ....它被存儲在相同的谷歌 驅動器文件夾作爲我的電子表格
  • 我複製到電子表格稱爲「WorkCalendar」,我想將信息粘貼到工作表「WorkCal」的單元格A1中。

我相當有能力使用複製和粘貼來拼湊一些VBA,但幾乎不知道Google腳本。

事情我已經嘗試包括:

任何幫助,您可以給將b e非常感謝......我感到沮喪,因爲這需要我30秒來在Excel中做。

感謝,

喬恩

+0

您是否嘗試了[導入](https://support.google.com/docs/answer/40608?hl=zh-CN)或您是否需要自動化?有[另一個問題](http://stackoverflow.com/questions/17578317/how-to-import-multiple-csv-files-of-identical-format-and-create-charts-automat) – oshliaer

+0

我已經有運氣使用HTML服務和'FileReader'實例導入.csv文件。 HTML服務參考:https://developers.google.com/apps-script/guides/html/ FileReader參考:https://developer.mozilla.org/en-US/docs/Web/API/FileReader。你必須將字符串解析爲一個數組,但是有一些人已經爲此寫了一些腳本。 –

+0

謝謝你的幫助。我想出的解決方案是使用這個:[如何從Excel 2003 VBA寫入「Google Spreadsheet」](http://stackoverflow.com/questions/9737354/how-to-write-to-a-google- spreadsheet-from-excel-2003-vba),但要確保生成csv文件的Excel文件將其格式化爲MS-DOS格式。 –

回答

0

我到底回答了這個自己。解決方案是下面的代碼,它是從這裏改編的:How to automatically import data from uploaded CSV or XLS file into Google Sheets,並確保我導入的CSV文件格式化爲MS-DOS CSV文件。

function importData() { 
var fSource = DriveApp.getFolderById('0B6MhpeZ2qe57WVdrLWNPdXBIT3c'); 
// reports_folder_id = id of folder where csv reports are saved 
var fi = fSource.getFilesByName('WorkFlowDataStoreDOS.csv'); 
// latest report file 
var ss = SpreadsheetApp.openById('13U6UAMH8r0fQsWwCE6rSMbLlxCNrlcKAmYxD9YKuG1Q'); 
// data_sheet_id = id of spreadsheet that holds the data to be updated with new report data 

if (fi.hasNext()) { // proceed if "report.csv" file exists in the reports folder 
var file = fi.next(); 
var csv = file.getBlob().getDataAsString(); 
var csvData = CSVToArray(csv); // see below for CSVToArray function 
var newsheet = ss.insertSheet('NEWDATA'); // create a 'NEWDATA' sheet to store imported data 
// loop through csv data array and insert (append) as rows into 'NEWDATA' sheet 
for (var i=0, lenCsv=csvData.length; i<lenCsv; i++) { 
    newsheet.getRange(i+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i])); 
} 

/* 
** report data is now in 'NEWDATA' sheet in the spreadsheet - process it as needed, 
** then delete 'NEWDATA' sheet using ss.deleteSheet(newsheet) 
*/ 

var centralStore = ss.getSheetByName ("CentralStore"); 
var newData = ss.getSheetByName ("NEWDATA"); 
var calRange = newData.getRange("A1:Y5001"); 
var calPaste = centralStore.getRange("A1"); 

calRange.copyTo(calPaste, {contentsOnly: true}) 

ss.setActiveSheet(ss.getSheetByName("NEWDATA")); 
ss.deleteActiveSheet() 
ss.setActiveSheet(ss.getSheetByName("CentralStore")); 

} 
}; 


// http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm 
// This will parse a delimited string into an array of 
// arrays. The default delimiter is the comma, but this 
// can be overriden in the second argument. 




function CSVToArray(strData, strDelimiter) { 
// Check to see if the delimiter is defined. If not, 
// then default to COMMA. 
strDelimiter = (strDelimiter || ","); 

// Create a regular expression to parse the CSV values. 
var objPattern = new RegExp(
(
    // Delimiters. 
    "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" + 

    // Quoted fields. 
    "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" + 

    // Standard fields. 
    "([^\"\\" + strDelimiter + "\\r\\n]*))" 
), 
    "gi" 
); 

// Create an array to hold our data. Give the array 
// a default empty first row. 
var arrData = [[]]; 

// Create an array to hold our individual pattern 
// matching groups. 
var arrMatches = null; 

// Keep looping over the regular expression matches 
// until we can no longer find a match. 
while (arrMatches = objPattern.exec(strData)){ 

// Get the delimiter that was found. 
var strMatchedDelimiter = arrMatches[ 1 ]; 

// Check to see if the given delimiter has a length 
// (is not the start of string) and if it matches 
// field delimiter. If id does not, then we know 
// that this delimiter is a row delimiter. 
if (
    strMatchedDelimiter.length && 
    (strMatchedDelimiter != strDelimiter) 
){ 

    // Since we have reached a new row of data, 
    // add an empty row to our data array. 
    arrData.push([]); 

} 

// Now that we have our delimiter out of the way, 
// let's check to see which kind of value we 
// captured (quoted or unquoted). 
if (arrMatches[ 2 ]){ 

    // We found a quoted value. When we capture 
    // this value, unescape any double quotes. 
    var strMatchedValue = arrMatches[ 2 ].replace(
    new RegExp("\"\"", "g"), 
    "\"" 
); 

} else { 

    // We found a non-quoted value. 
    var strMatchedValue = arrMatches[ 3 ]; 

} 

// Now that we have our value string, let's add 
// it to the data array. 
arrData[ arrData.length - 1 ].push(strMatchedValue); 
} 

// Return the parsed data. 
return(arrData); 
}; 
相關問題