4

我的應用程序生成數據表並在用戶的Google雲端硬盤中創建新的電子表格文檔。如何將格式(顏色,字體重量,寬度等)添加到單個單元格?我似乎無法找到任何文檔,更不用說我可以通過google-api-ruby-client實現這一點。如何使用API​​來格式化Google表格電子表格單元格?

我的大部分發現都追溯到Google API郵件列表,聲明它不受支持。
但是,我發現另一個應用程序可以完成我想要的結果。所得到的片在我的谷歌驅動器

At Smartsheet.com

而且:

從Smartsheet.com:的 「Smartsheet」 文檔導出爲谷歌驅動器的一個例子

In my Google Drive

回答

3

Smartsheet利用Google API導入Excel文件的功能。代碼大致是沿着這些線路:

DocsService client = new DocsService(<YOUR APP NAME>); 
client.setOAuthCredentials(<OAUTH PARAMETERS>); 

DocumentListEntry newEntry = new SpreadsheetEntry(); 
newEntry.setMediaSource(new MediaByteArraySource(<EXCEL FILE BYTE ARRAY OUTPUT STREAM>, DocumentListEntry.MediaType.XLS.getMimeType())); 
newEntry.setTitle(new PlainTextConstruct(<FILE NAME>)); 

DocumentListEntry insertedEntry = client.insert(new URL("https://docs.google.com/feeds/default/private/full/"), newEntry); 

// This is your URL to the new doc 
String docUrl = insertedEntry.getDocumentLink().getHref(); 

我們已經有一個Smartsheet導出到Excel與通過Apache POI文件格式的能力。將導出添加到Google電子表格對我們來說非常簡單,它提供了一些額外的功能,超出了您可以通過API執行的功能。

對不起,延遲響應 - 只發生在這個問題。

2

的API僅提供對數據的訪問權限,不公開任何添加格式的方法。

+0

感謝您的回覆。我知道沒有文檔記錄的方式,但Smartsheet必須以某種方式進行。也許是一個私人API?也許不是你能透露的東西。 – tbeseda

+0

這不再是事實。有關更多詳細信息,請參閱上述答案 – wescpy

1

如果像我一樣上傳預格式化的Excel工作表是不夠的,那麼Google Apps腳本看起來可能是要走的路。 Range類專門讓你操縱至少一些你問的格式。

https://developers.google.com/apps-script/reference/spreadsheet/range

setFontColor()和setFontWeight()是有的,但我不知道任何東西的單元格的寬度呢。

重要的是,我還沒有想出如何在谷歌Apps腳本綁定到我使用的是谷歌雲端硬盤API SDK(節點/ Javascript語言,我的情況下,紅寶石在你的)創建的工作表。

https://developers.google.com/apps-script/guides/bound

它已經因爲你的問題了一段時間,所以我打賭你已經解決了它的一些其他方式。我也不一定建議將應用中的所有內容移植到Google Apps腳本中(儘管我認真考慮它自己......),但是如果您或其他某位讀者瞭解如何將Google應用腳本綁定到電子表格用google-api-ruby-client,你可能會很好。

2

另一個選項(以及最後使用的選項)是手動創建一個Google Sheet文件,並將所有格式預先配置爲模板。然後,而不是建立在用戶的谷歌雲端硬盤中的新的電子表格文檔,複製的模板,像這樣:

var config = require('./config'); 
var google = require('googleapis'); 

function createSheetFromTemplate(user, templateFileId, done) { 

    var oauth2Client = new google.auth.OAuth2(config.google.clientId, config.google.clientSecret); 

    oauth2Client.setCredentials({ 
    access_token: user.google.token, 
    refresh_token: user.google.refreshToken, 
    }); 

    var drive = google.drive({ 
    version: 'v2', 
    auth: oauth2Client 
    }); 
    drive.files.copy({ 
    fileId: templateFileId, 
    resource: { 
     title: 'New Google Sheet', 
     parents: [{ 
     id: 'root' 
     }] 
    } 
    }, function(err, response) { 
    if (err) done(err) 

    initializeSpreadsheet(response.id, user, done); 
    }); 
} 

在該代碼中,templateFileId是您共享模板的文件ID。您可以通過多種方式從共享模板文件中獲取此fileId,但快捷方式只是在分享時將其從URL中複製粘貼出來。

例如,如果共享的網址是:

https://docs.google.com/spreadsheets/d/1234567890abcdefghijklmnop/edit?usp=sharing

然後將文件ID 1234567890abcdefghijklmnop

在我來說沒有什麼私人的模板本身,所以我只是共享它與'具有鏈接的任何人'配置爲'可以查看',如下所述:

https://support.google.com/drive/answer/2494886

如果您需要保持模板文件的內容爲私密,那麼您需要找到一些方法來確保由config.google.clientId指定的帳戶有權訪問它。

希望有幫助!

3

(2017年2月)As of Google I/O 2016,開發人員現在可以使用Google Sheets API格式化單元格。下面是加粗的第一行短Python的例子(假設該文件ID是SHEET_IDSHEETS是API服務端點):

DATA = {'requests': [ 
    {'repeatCell': { 
     'range': {'endRowIndex': 1}, 
     'cell': {'userEnteredFormat': {'textFormat': {'bold': True}}}, 
     'fields': 'userEnteredFormat.textFormat.bold', 
    }} 
]} 

SHEETS.spreadsheets().batchUpdate(
     spreadsheetId=SHEET_ID, body=DATA).execute() 

我也做了一個開發者視頻對這個問題沒有什麼幫助(見下文)。順便說一句,您可以在Ruby中執行相同的操作(請參閱its API quickstart sample)或Google APIs Client Libraries支持的任何其他語言。

Sheets API提供的功能在舊版本中不可用,即讓開發人員對工作表進行編程訪問,就像使用用戶界面一樣(凍結行,單元格格式化[!],調整行/列大小,添加數據透視表,創建圖表等)。如果你是新來的API,我創建了一些影片,更「現實世界」的例子:

正如你所知道的,牀單API主要是爲文件取向功能如上所述,但要執行文件 - 級別訪問(如導入/導出,複製,移動,重命名等),請改爲使用Google Drive API

相關問題