Làm cách nào để tôi có thể truy cập bảng tính Google Trang tính chỉ bằng Javascript?


101

Tôi muốn truy cập Bảng tính Google chỉ bằng JavaScript (không có .NET, C #, Java, v.v.)

Tôi đến đây và bị sốc khi biết rằng KHÔNG có API nào cho JavaScript để truy cập Google Trang tính.

Vui lòng cho tôi biết cách truy cập (TẠO / CHỈNH SỬA / XÓA) Google Trang tính bằng JavaScript hoặc bất kỳ khung nào của nó như jQuery.


1
liên kết bạn cung cấp có thông tin về việc sử dụng JSON. bạn sẽ có thể sử dụng nó trong JavaScript.
GSto

1
@GSto, sẽ rất hữu ích nếu bạn có thể cung cấp cho tôi một số thông tin chi tiết về vấn đề này. Cho tôi hỏi bạn một lần nữa, tôi muốn truy cập bảng tính google thông qua javascript. Cảm ơn.
Pratik

1
Đây là hướng dẫn đầy đủ developers.google.com/sheets/api/quickstart/js
FONGOH MARTIN

Có thể muốn xem xét sử dụng Sheetsu. Nó khá đơn giản đối với API JSON và bị giới hạn với phiên bản miễn phí, nhưng nó thực sự đơn giản hóa những gì bất kỳ nhà phát triển nào cần để sử dụng bảng tính Google. Hy vọng điều này sẽ giúp một số người.
Jester

Câu trả lời:


60

Tôi đã tạo một thư viện javascript đơn giản để truy xuất dữ liệu bảng tính của google (nếu chúng được xuất bản) qua api JSON:

https://github.com/mikeymckay/google-spreadsheet-javascript

Bạn có thể thấy nó hoạt động ở đây:

http://mikeymckay.github.com/google-spreadsheet-javascript/sample.html


3
Điều này đã tiết kiệm cho tôi rất nhiều thời gian. Cảm ơn bạn rất nhiều! Tuy nhiên, tôi đã quyết định phân nhánh mã của bạn, để có thể xử lý các ô dữ liệu trống và cũng sắp xếp nó thành các hàng (dữ liệu được trả về như thể chỉ là một mảng ô khổng lồ, nhưng vì các ô trống không được đã tính đến, không có cách nào dễ dàng để tổ chức dữ liệu). Bản cập nhật chỉ dành cho phương thức 'callbackCells ()' của bạn. Hãy khám phá: github.com/rw3iss/google-spreadsheet-javascript.git Cảm ơn bạn một lần nữa!
Ryan Weiss

5
Câu trả lời của Evan Plaice's stackoverflow.com/a/8666573/42082 có thông tin chi tiết hơn về API Google Tài liệu chính thức và cách sử dụng bảng tính. Đáng để xem.
Ape-inago

phiên bản mới API 3.0 và Oauth 2.0
PreguntonCojoneroCabrón

Có vẻ như google đã thay đổi chính sách và điều này hiện đã bị hỏng.
Chirag

50

CẬP NHẬT tháng 1 năm 2018 : Khi tôi trả lời câu hỏi này vào năm ngoái, tôi đã sơ ý đề cập đến cách thứ ba để truy cập các API của Google bằng JavaScript và đó sẽ là từ các ứng dụng Node.js bằng cách sử dụng thư viện khách , vì vậy tôi đã thêm nó vào bên dưới.

Đó là tháng 3 năm 2017 và hầu hết các câu trả lời ở đây đã lỗi thời - câu trả lời được chấp nhận hiện đề cập đến thư viện sử dụng phiên bản API cũ hơn. Một câu trả lời mới hơn: bạn có thể truy cập hầu hết các API của Google chỉ bằng JavaScript. Google cung cấp 3 cách để thực hiện việc này ngay hôm nay:

  1. Như đã đề cập trong câu trả lời của Dan Dascalescu , bạn có thể sử dụng Google Apps Script , giải pháp JavaScript trong đám mây của Google. Đó là, các ứng dụng JS phía máy chủ không phải Node bên ngoài trình duyệt chạy trên máy chủ của Google.
  2. Bạn cũng có thể sử dụng Thư viện ứng dụng API của Google cho JavaScript để truy cập API REST của Google Trang tính mới nhất ở phía máy khách.
  3. Cách thứ 3 để truy cập các API của Google bằng JavaScript là từ các ứng dụng Node.js bằng cách sử dụng thư viện ứng dụng khách của nó . Nó hoạt động tương tự như sử dụng thư viện máy khách JavaScript (client) được mô tả ở trên, chỉ là bạn sẽ truy cập cùng một API từ phía máy chủ. Đây là ví dụ Khởi động nhanh Node.js cho Trang tính. Bạn có thể thấy các video dựa trên Python ở trên thậm chí còn hữu ích hơn vì chúng cũng truy cập vào API từ phía máy chủ.

Khi sử dụng REST API, bạn cần quản lý và lưu trữ mã nguồn của mình cũng như thực hiện ủy quyền bằng cách cuộn mã xác thực của riêng bạn (xem các mẫu ở trên). Apps Script thay mặt bạn xử lý việc này, quản lý dữ liệu (giảm bớt "nỗi đau" như được đề cập bởi Ape-inago trong câu trả lời của họ ) và mã của bạn được lưu trữ trên máy chủ của Google. Nhưng chức năng của bạn bị hạn chế đối với những dịch vụ mà App Script cung cấp trong khi API REST cung cấp cho các nhà phát triển quyền truy cập rộng hơn vào API. Nhưng này, thật tốt khi có sự lựa chọn, phải không? Tóm lại, để trả lời câu hỏi gốc của OP, thay vì số 0, các nhà phát triển có ba cách để truy cập Google Trang tính bằng JavaScript.


35

Đây là ý chính.

Bạn có thể tạo bảng tính bằng API Google Trang tính . Hiện tại không có cách nào để xóa bảng tính bằng API (đọc tài liệu). Hãy coi API của Google Tài liệu là lộ trình để tạo và tra cứu tài liệu.

Bạn có thể thêm / xóa trang tính trong bảng tính bằng cách sử dụng nguồn cấp dữ liệu dựa trên trang tính .

Việc cập nhật bảng tính được thực hiện thông qua nguồn cấp dữ liệu dựa trên danh sách hoặc nguồn cấp dữ liệu dựa trên ô .

Việc đọc bảng tính có thể được thực hiện thông qua API Google Spreadsheets được đề cập ở trên hoặc chỉ đối với các trang đã xuất bản , bằng cách sử dụng Ngôn ngữ truy vấn API của Google Visualization để truy vấn dữ liệu (có thể trả về kết quả ở định dạng bảng CSV, JSON hoặc HTML).


Quên jQuery. jQuery chỉ thực sự có giá trị nếu bạn đang duyệt qua DOM. Vì GAS (Google Apps Scripting) không sử dụng DOM jQuery sẽ không có giá trị gì cho mã của bạn. Bám vào vani.

Tôi thực sự ngạc nhiên rằng chưa có ai cung cấp thông tin này trong một câu trả lời. Nó không chỉ có thể được thực hiện mà còn tương đối dễ dàng để sử dụng vanilla JS. Ngoại lệ duy nhất là Google Visualization API tương đối mới (tính đến năm 2011). API trực quan hóa cũng hoạt động độc quyền thông qua URI chuỗi truy vấn HTTP.


13

Có một giải pháp không yêu cầu một giải pháp xuất bản bảng tính. Tuy nhiên, trang tính cần phải được 'Chia sẻ'. Cụ thể hơn, một người cần chia sẻ trang tính theo cách mà bất kỳ ai có liên kết đều có thể truy cập vào bảng tính. Sau khi hoàn tất, người ta có thể sử dụng API HTTP của Google Trang tính.

Đầu tiên, bạn cần có khóa API của Google. Truy cập tại đây: https://developers.google.com/places/web-service/get-api-key NB. Vui lòng lưu ý về các phân nhánh bảo mật của việc cung cấp khóa API cho mọi người: https://support.google.com/googleapi/answer/6310037

Nhận tất cả dữ liệu cho một bảng tính - cảnh báo, đây có thể là rất nhiều dữ liệu.

https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/?key={yourAPIKey}&includeGridData=true

Nhận siêu dữ liệu trang tính

https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/?key={yourAPIKey}

Nhận một loạt các ô

https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/values/{sheetName}!{cellRange}?key={yourAPIKey}

Bây giờ được trang bị thông tin này, người ta có thể sử dụng AJAX để lấy dữ liệu và sau đó thao tác với nó trong JavaScript. Tôi muốn khuyên bạn nên sử dụng axios .

var url = "https://sheets.googleapis.com/v4/spreadsheets/{spreadsheetId}/?key={yourAPIKey}&includeGridData=true";                                                             
axios.get(url)
  .then(function (response) {
    console.log(response);                                                                                                                                                    
  })
  .catch(function (error) {
    console.log(error);                                                                                                                                                       
  });                

Dữ liệu lưới là gì?
William Entriken

@WilliamEntriken Nội dung của các ô.
robsco

11

Bản cập nhật 2016 : Cách dễ nhất là sử dụng API Google Apps Script, cụ thể là Dịch vụ bảng tính . Điều này hoạt động cho các trang tính riêng tư, không giống như các câu trả lời khác yêu cầu xuất bản bảng tính.

Điều này sẽ cho phép bạn liên kết mã JavaScript với Google Trang tính và thực thi nó khi trang tính được mở hoặc khi một mục menu (mà bạn có thể xác định) được chọn.

Đây là một Khởi động nhanh / Demo . Mã trông như thế này:

// Let's say you have a sheet of First, Last, email and you want to return the email of the
// row the user has placed the cursor on.
function getActiveEmail() {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var activeRow = .getActiveCell().getRow();
  var email = activeSheet.getRange(activeRow, 3).getValue();

  return email;
}

Bạn cũng có thể xuất bản các tập lệnh như vậy dưới dạng ứng dụng web .


6

chỉnh sửa: Điều này đã được trả lời trước khi api của tài liệu google được phát hành. Xem câu trả lời của Evan Plaice câu trả lời của Dan Dascalescu để biết thêm thông tin cập nhật.

Có vẻ như bạn có thể làm được, nhưng thật khó sử dụng. Nó liên quan đến việc sử dụng API dữ liệu của Google.

http://gdatatips.blogspot.com/2008/12/using-javascript-client-library-w-non.html

"Thư viện ứng dụng khách JavaScript có các phương thức trợ giúp cho Lịch, Danh bạ, Blogger và Google Finance. Tuy nhiên, bạn có thể sử dụng nó với bất kỳ API dữ liệu nào của Google để truy cập nguồn cấp dữ liệu riêng tư / được xác thực. Ví dụ này sử dụng API DocList."

và một ví dụ về cách viết một tiện ích giao diện với bảng tính: http://code.google.com/apis/spreadsheets/gadgets/


tại sao bạn gọi nó là "đau đớn". có tác hại gì khi làm như vậy?
Pratik

1
Một điều khó khăn vì nó không có api gốc, có nghĩa là bạn cần phải tự mình thực hiện nhiều phân tích cú pháp và thao tác dữ liệu. một api bảng tính gốc sẽ cung cấp những thứ này cho bạn.
Ape-inago

4

Việc triển khai 'JavaScript truy cập vào Google Documents' sẽ rất tẻ nhạt và hơn nữa, tài liệu của Google cũng không đơn giản để có được nó. Tôi có một số liên kết tốt để chia sẻ mà bạn có thể đạt được quyền truy cập js vào gdoc:

http://code.google.com/apis/documents/docs/3.0/developers_guide_protocol.html#UploadingDocs

http://code.google.com/apis/spreadsheets/gadgets/

http://code.google.com/apis/gdata/docs/js.html

http://www.mail-archive.com/google-help-dataapi@googlegroups.com/msg01924.html

Có thể những điều này sẽ giúp bạn ra ngoài ..


8
liên kết 1 sẽ được phản On April 20, 2015, liên kết 2 lỗi 404, liên kết 3 v2.0 bị phản đối, liên kết 4 bị phản đối
vladkras

2

Xin lỗi, đây là một câu trả lời tệ hại. Rõ ràng đây là một vấn đề trong gần hai năm, vì vậy đừng nín thở.

Đây là yêu cầu chính thức mà bạn có thể "gắn dấu sao"

Có lẽ cách gần nhất bạn có thể đến là triển khai dịch vụ của riêng bạn với Google App Engine / Python và hiển thị bất kỳ tập hợp con nào bạn cần với thư viện JS của riêng bạn. Mặc dù tôi muốn tự mình có giải pháp tốt hơn.


2

Trong thế giới thay đổi nhanh chóng này, hầu hết các liên kết này là obsolet.

Giờ đây, bạn có thể sử dụng API Web của Google Drive :



ok, đây là danh sách đầy đủ các sản phẩm của Google bao gồm cả bảng tính (dễ dàng để tìm cách sử dụng liên kết đầu tiên của tôi mặc dù)
vladkras


1

Đối với loại điều này, bạn nên sử dụng Google Fusion Tables . Các API được thiết kế cho mục đích đó.


Không phải là một ý tưởng tốt. Google sẽ đóng cửa nó. Từ chối nó.
A_01,

1

Bạn có thể đọc dữ liệu bảng tính Google Trang tính bằng JavaScript bằng cách sử dụng trình kết nối trang tính RGraph:

https://www.rgraph.net/canvas/docs/import-data-from-google-sheets.html

Ban đầu (một vài năm trước) điều này dựa vào một số hàm RGraph để hoạt động phép thuật của nó - nhưng bây giờ nó có thể hoạt động độc lập (tức là không yêu cầu thư viện chung RGraph).

Một số mã ví dụ (ví dụ này tạo biểu đồ RGraph):

<!-- Include the sheets library -->
<script src="RGraph.common.sheets.js"></script>

<!-- Include these two RGraph libraries to make the chart -->
<script src="RGraph.common.key.js"></script>
<script src="RGraph.bar.js"></script>

<script>
    // Create a new RGraph Sheets object using the spreadsheet's key and
    // the callback function that creates the chart. The RGraph.Sheets object is
    // passed to the callback function as an argument so it doesn't need to be
    // assigned to a variable when it's created
    new RGraph.Sheets('1ncvARBgXaDjzuca9i7Jyep6JTv9kms-bbIzyAxbaT0E', function (sheet)
    {
        // Get the labels from the spreadsheet by retrieving part of the first row
        var labels = sheet.get('A2:A7');

        // Use the column headers (ie the names) as the key
        var key = sheet.get('B1:E1');

        // Get the data from the sheet as the data for the chart
        var data   = [
            sheet.get('B2:E2'), // January
            sheet.get('B3:E3'), // February
            sheet.get('B4:E4'), // March
            sheet.get('B5:E5'), // April
            sheet.get('B6:E6'), // May
            sheet.get('B7:E7')  // June
        ];

        // Create and configure the chart; using the information retrieved above
        // from the spreadsheet
        var bar = new RGraph.Bar({
            id: 'cvs',
            data: data,
            options: {
                backgroundGridVlines: false,
                backgroundGridBorder: false,
                xaxisLabels: labels,
                xaxisLabelsOffsety: 5,
                colors: ['#A8E6CF','#DCEDC1','#FFD3B6','#FFAAA5'],
                shadow: false,
                colorsStroke: 'rgba(0,0,0,0)',
                yaxis: false,
                marginLeft: 40,
                marginBottom: 35,
                marginRight: 40,
                key: key,
                keyBoxed: false,
                keyPosition: 'margin',
                keyTextSize: 12,
                textSize: 12,
                textAccessible: false,
                axesColor: '#aaa'
            }
        }).wave();
    });
</script>

Và bây giờ có một phiên bản PHP của tiện ích nhập - có sẵn tại cùng một URL
Richard

0

Tôi đang xây dựng Stein để giúp bạn làm điều đó. Nó cũng cung cấp một giải pháp chỉ HTML, nếu bạn muốn hiển thị dữ liệu trực tiếp từ trang tính. Kiểm tra nó tại steinhq.com .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.