2016-09-16 20 views
0

我已将下面的代码从Write data to Google Sheet using Google Sheet API V4 - Java Sample Code @“Ashwin Karangutkar”中提取出来。这写入到googlespread表单中的单元格。谷歌传播工作表,使用/ java附加数据

但是我真的很想这样做,就是将这些数据附加到表单上而不是写在第一行上。我遇到过api的AppendCellsRequest函数,但我不太确定如何整合它。谁能帮我这个?

预先感谢您。

亲切的问候,

尼科斯。

Aswin的代码示例

public static void setValue(String SheetName,String RowStart, String RowEnd) throws IOException{ 
    // Build a new authorized API client service. 
    Sheets service = getSheetsService(); 
    // Prints the names and majors of students in a sample spreadsheet: 
    String spreadsheetId = "17PQyEPayrHSIgvPtrfZtItuUcArhvjDy-G68Xg02s3s"; 
    String range = SheetName+"!"+RowStart+":"+RowEnd; 
    Integer sheetLocationNumber = 0; 


    List<List<Object>> arrData = getData(); 

    ValueRange oRange = new ValueRange(); 
    oRange.setRange(range); // I NEED THE NUMBER OF THE LAST ROW 
    oRange.setValues(arrData); 

    List<ValueRange> oList = new ArrayList<>(); 
    oList.add(oRange); 

    BatchUpdateValuesRequest oRequest = new BatchUpdateValuesRequest(); 
    oRequest.setValueInputOption("RAW"); 
    oRequest.setData(oList); 

    BatchUpdateValuesResponse oResp1 = service.spreadsheets().values().batchUpdate(spreadsheetId, oRequest).execute(); 

    // service.spreadsheets().values().update (spreadsheetId, range,) ; 
    //return request; 
} 

public static List<List<Object>> getData() { 

//数据添加到水平轴(同一行)

List<Object> data1 = new ArrayList<Object>(); 
    data1.add ("Example"); 
    data1.add ("Example2"); 
    System.out.println("Values"); 

//将数据添加到垂直轴(新行)

List<List<Object>> data = new ArrayList<List<Object>>(); 
    data.add (data1); 

    return data; 
} 

回答

2

如果你想追加数据(并且不关心格式化或其他适当的一个单元格的关系),最简单的就是使用spreadsheets.values.append。例如使用指南是here

用法与values.update或values.get类似。

1

我能够使用java将数据追加到我自己的Google电子表格中,我从这个stackflow问题Google Sheet API V4(Java) append Date in cells中得到了答案,并修改了它以添加我的数据,我以下面的代码为例。我会承认,它做得很不好,它不是可缩放的atm,我要做一个hashMap/list来匹配头部的值,这样我就可以正确地更新这些字段,而不是将它们更新为blindfold因为我是atm。

public static void main(String[] args) throws Exception { 

     Sheets service = getSheetsService(); 

     String spreadSheetID = "xx"; 
     Integer sheetID = 0; 

     String defectReferenceValue = "Defect 9999"; 
     Double defectIDValue = 9999.0; 
     String areaValue = "RandomArea"; 
     String screenValue = ""; 
     String fieldValue = ""; 
     String reqValue = ""; 
     String ruleValue = ""; 
     String fieldIDValue = ""; 
     String defectDescriptionValue = ""; 
     String screenShotValue = "ScreenShotLink"; 
     String dateValue = dateForReport(); 


     List<RowData> rowData = new ArrayList<RowData>(); 
     List<CellData> cellData = new ArrayList<CellData>(); 

     CellData defectReferenceField = new CellData(); 
     defectReferenceField.setUserEnteredValue(new ExtendedValue().setStringValue(defectReferenceValue)); 
     defectReferenceField.setUserEnteredFormat(new CellFormat().setNumberFormat(new NumberFormat().setType("DATE"))); 
     cellData.add(defectReferenceField); 

     CellData defectIDField = new CellData(); 
     defectIDField.setUserEnteredValue(new ExtendedValue().setNumberValue(defectIDValue)); 
     cellData.add(defectIDField); 

     CellData areaField = new CellData(); 
     areaField.setUserEnteredValue(new ExtendedValue().setStringValue(areaValue)); 
     cellData.add(areaField); 

     CellData screenField = new CellData(); 
     screenField.setUserEnteredValue(new ExtendedValue().setStringValue(screenValue)); 
     cellData.add(screenField); 

     CellData fieldField = new CellData(); 
     fieldField.setUserEnteredValue(new ExtendedValue().setStringValue(fieldValue)); 
     cellData.add(fieldField); 

     CellData reqField = new CellData(); 
     reqField.setUserEnteredValue(new ExtendedValue().setStringValue(reqValue)); 
     cellData.add(reqField); 

     CellData ruleField = new CellData(); 
     ruleField.setUserEnteredValue(new ExtendedValue().setStringValue(ruleValue)); 
     cellData.add(ruleField); 

     CellData fieldIDField = new CellData(); 
     fieldIDField.setUserEnteredValue(new ExtendedValue().setStringValue(fieldIDValue)); 
     cellData.add(fieldIDField); 

     CellData defectDescriptionField = new CellData(); 
     defectDescriptionField.setUserEnteredValue(new ExtendedValue().setStringValue(defectDescriptionValue)); 
     cellData.add(defectDescriptionField); 

     CellData screenShotField = new CellData(); 
     screenShotField.setUserEnteredValue(new ExtendedValue().setStringValue(screenShotValue)); 
     cellData.add(screenShotField); 

     CellData dateField = new CellData(); 
     dateField.setUserEnteredValue(new ExtendedValue().setStringValue(dateValue)); 
     cellData.add(dateField); 

     rowData.add(new RowData().setValues(cellData)); 

     BatchUpdateSpreadsheetRequest batchRequests = new BatchUpdateSpreadsheetRequest(); 
     BatchUpdateSpreadsheetResponse response; 
     List<Request> requests = new ArrayList<Request>(); 

     AppendCellsRequest appendCellReq = new AppendCellsRequest(); 
     appendCellReq.setSheetId(sheetID); 
     appendCellReq.setRows(rowData); 
     appendCellReq.setFields("userEnteredValue,userEnteredFormat.numberFormat"); 


     requests = new ArrayList<Request>(); 
     requests.add(new Request().setAppendCells(appendCellReq)); 
     batchRequests = new BatchUpdateSpreadsheetRequest(); 
     batchRequests.setRequests(requests); 


     response = service.spreadsheets().batchUpdate(spreadSheetID, batchRequests).execute(); 
     System.out.println("Request \n\n"); 
     System.out.println(batchRequests.toPrettyString()); 
     System.out.println("\n\nResponse \n\n"); 
     System.out.println(response.toPrettyString()); 
    } 

我希望这可以帮助其他人寻找类似的答案。

Regards,

Nikos。

+0

你在哪里通过表名或通过数字0提及呢? – Ankit

0
 String content ="just now"; 
     List<Object> data1 = new ArrayList<>(); 
     data1.add (content); 
     List<List<Object>> data = new ArrayList<>(); 
     data.add (data1); 
     ValueRange valueRange=new ValueRange(); 
     valueRange.setValues(data); 
     service.spreadsheets().values(). 
     append(spreadsheetId, range, valueRange) 
       .setValueInputOption("RAW") 
       .execute(); 

上面的代码工作正常