我一直在寻找答案或一个例子。我开始使用google api sheet v4,找到了将数据附加到电子表格的答案,并在此堆栈问题中提出了问题> Google Sheet API V4(Java) append Date in cells
/**
* Application name.
*/
private static final String APPLICATION_NAME =
"Google Sheets API Java Quickstart";
/**
* Directory to store user credentials for this application.
*/
private static final java.io.File DATA_STORE_DIR = new java.io.File(
System.getProperty("user.home"), ".credentials/sheets.googleapis.com-java-quickstart");
/**
* Global instance of the {@link FileDataStoreFactory}.
*/
private static FileDataStoreFactory DATA_STORE_FACTORY;
/**
* Global instance of the JSON factory.
*/
private static final JsonFactory JSON_FACTORY =
JacksonFactory.getDefaultInstance();
/**
* Global instance of the HTTP transport.
*/
private static HttpTransport HTTP_TRANSPORT;
/**
* Global instance of the scopes, read/write commands depend on that
* <p/>
* If modifying these scopes, delete your previously saved credentials
* at ~/.credentials/drive-java-quickstart
*/
private static final List<String> SCOPES =
Arrays.asList(SheetsScopes.SPREADSHEETS);
static {
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
} catch (Throwable t) {
t.printStackTrace();
System.exit(1);
}
}
/**
* Creates an authorized Credential object.
*
* @return an authorized Credential object.
* @throws IOException
*/
public static Credential authorize() throws IOException {
// Load client secrets.
InputStream in =
SheetsWithAppendTest.class.getResourceAsStream("/client_secret.json");
GoogleClientSecrets clientSecrets =
GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow =
new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
Credential credential = new AuthorizationCodeInstalledApp(
flow, new LocalServerReceiver()).authorize("user");
System.out.println(
"Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
return credential;
}
/**
* Build and return an authorized Sheets API client service.
*
* @return an authorized Sheets API client service
* @throws IOException
*/
public static Sheets getSheetsService() throws IOException {
Credential credential = authorize();
return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName("SHEETS_QUICK_START")
.build();
}
public static String dateForReport() {
DateFormat dateformat = new SimpleDateFormat("MM/dd/yy");
Date dateObj = new Date();
return dateformat.format(dateObj);
}
public static void main(String[] args) throws Exception {
Sheets service = getSheetsService();
String spreadSheetID = "xxx";
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());
}
虽然解决方案功能正常,但它不可扩展,但它会逐步向工作表添加值,而不对标题进行任何检查。我真正想做的是为标题行添加像hashmap这样的值&#34; 缺陷&#34; =&#34; x&#34;标题行&#34; 日期&#34; = y等。
有没有人有这方面的示例解决方案,还是可以指引我使用我可以用于答案的资源?任何帮助将不胜感激。
提前谢谢你,
尼科斯。
答案 0 :(得分:1)
存储列列表
列表中的每个项目。检查hashmap中的值 如果该值不存在,请添加空白单元格 如果值存在则将值放在单元格中
Map<String,String> values=new HashMap<>();
.
.
.
String[] columns ={"greek legend","minataur"};
for(int i=0;i<columns.length;i++){
String val=values.get(columns[i]);
if(val!=null)
{
//put value in cell
}
else{
//add blank cell
}
}