2009-12-03 36 views
8

Tôi đã có sẵn bảng tính được lưu trữ trên tài liệu google. Mỗi tháng tôi cập nhật tài liệu này. Tôi đã có một bản mẫu làm việc trong bản phân phối mà tôi muốn sao chép và sau đó cập nhật.Cập nhật có tính toán bảng tính được lưu trữ trên tài liệu google

Tôi muốn sao chép trang tính hơn là tạo trang tính từ đầu vì nó có một số công thức khá phức tạp.

Tôi đang sử dụng api Python cho docs google đây:

http://code.google.com/apis/spreadsheets/data/1.0/developers_guide_python.html

Có ai biết làm thế nào để sao chép và sao chép một bảng tính trong tài liệu tồn tại trước đó?

Sửa

tôi dường như có lẫn lộn một người đọc. Tôi không có bảng tính excel. Tôi chỉ có bảng tính Google Tài liệu có trang tính mẫu.

Tôi muốn sao chép bảng tính này, đổi tên trang tính và sau đó chỉnh sửa theo chương trình.

+1

@Priyank Bolia. Tôi không nghĩ bạn hiểu Google Documents. Tôi hoàn toàn không có bảng tính Excel. Tôi chỉ có một bảng tính Google Docs. Trong trang tính này, tôi có một trang tính mẫu mà tôi muốn sao chép, đổi tên và sau đó chỉnh sửa. Tôi muốn làm điều này theo chương trình. – chollida

+0

Bạn giải quyết vấn đề này như thế nào? – Tyug

+0

@Tyug Tôi chưa giải quyết được. – chollida

Trả lời

6
  1. Clone mẫu của bạn bảng tính sử dụng các hướng dẫn trên Copying Documents
  2. Truy cập list of worksheets trong tài liệu nhân bản và lặp thông qua các bảng tính cần thiết.
  3. Sử dụng cell feed để nhận ô thích hợp trong bảng tính của bạn, sau đó update giá trị.
2

Điều này thực sự phức tạp. Tôi hiểu rằng bạn có thể chỉnh sửa bảng tính bằng Python bằng API của họ, Google có xu hướng cung cấp khả năng đó trên nhiều dịch vụ web của họ và tất cả đều được thực hiện bằng cách gửi yêu cầu đăng HTTP bằng XML bằng cách nào đó, tôi hy vọng bạn biết phần đó, tôi không ' t.

Theo this bạn ít nhất có thể thêm trang tính, đọc các hàng từ các trang tính khác và viết hàng vào trang tính. nếu bạn phải, bạn có thể sao chép nó một hàng tại một thời điểm, tuy nhiên gửi một yêu cầu POST bổ sung cho mỗi hàng có vẻ như một ý tưởng khủng khiếp.

Edit:

Tôi đang tìm hiểu thêm và nhiều hơn nữa về vấn đề này, nhưng vẫn còn một chặng đường dài từ giải quyết vấn đề ban đầu của bạn. Điều này overview of REST principles đi qua phong cách tương tác cơ bản diễn ra giữa các chương trình trên web. Google dường như đang theo dõi nó một cách tôn giáo.

Tất cả đều diễn ra trong giao thức HTTP, điều mà tôi không biết gì trước ngày hôm nay. Trong số HTTP specification trò chơi cơ bản này được viết ra. Nó không phải là khô như nó có vẻ, và có lẽ tôi chỉ là một geek rất lớn, nhưng tôi tìm thấy nó một cảm hứng đọc. Không giống như Hiến pháp của Hoa Kỳ.

Vì vậy, vì bạn muốn "sao chép" một tài liệu, bạn sẽ sử dụng yêu cầu GET cho một trang tính cụ thể và sau đó gửi lại trang tính đó dưới dạng tải trọng của POST.

Bắt gần hơn :)

1

Không thể bạn có thể xuất khẩu bảng tính của bạn như một xls và sau đó tải nó như là một doc mới với một (hơi) tên khác nhau, xác định tên mới trong siêu dữ liệu XML?

Phần Tải xuống và tạo/tải lên tài liệu tại http://code.google.com/apis/documents/overview.html sẽ mang lại lợi ích.

Tôi không thể thấy ngay bất kỳ chức năng nhập/xuất nào trong tài liệu API Python, nhưng việc gửi một vài yêu cầu http không quá tệ.

+0

Tôi đã xem tài liệu tải xuống mà bạn đã đăng :) Cảm ơn sự giúp đỡ của bạn. – chollida

2

Trước hết, tôi chưa bao giờ làm việc với Python trước đây - nhưng tôi sẽ cho bạn biết cách tôi đã làm điều này trong C++.

Tôi đã sử dụng cURL để thực hiện yêu cầu GET đến số google documents API. Dữ liệu nhị phân của tệp đã được trả lại và tôi đã viết tệp đó vào một tệp. Bây giờ tôi đã có tệp XLS và sau đó tôi đã sử dụng thư viện C/C++ có thể đọc các tệp XLS để thao tác tệp đã tải xuống. API mà tôi đã sử dụng hỗ trợ nhiều tùy chọn khác nhau; bạn có thể làm bất cứ điều gì mà bạn có thể làm trong Excel. Sau khi sửa đổi, tôi đã tải nó lên Google Docs.

+0

Yuck, đó là điều tôi sợ. Tôi đoán nó sẽ hoạt động nếu tôi có thể tải lên bản sao cục bộ sửa đổi có cùng tên với bản gốc trực tuyến. Cảm ơn sự giúp đỡ của bạn. – chollida

4

Whoa !!! Quay lại xe tải lên. Có một cách tiếp cận đơn giản hơn nhiều

Tôi đã nghiên cứu điều này một chút trong vài tuần qua vì tôi đang lên kế hoạch thực hiện tương tự cho báo cáo hàng tháng của mình. Tôi chưa có mã thực sự nhưng tôi sẽ thêm nó khi tôi tiến bộ.

Trong Google Documents, có quá nhiều API và các thuật ngữ tương tự liên quan đến việc làm việc với tài liệu mà mọi thứ có thể gây nhầm lẫn một chút. Nếu bạn chưa biết, hãy thiết lập trong đầu của bạn thực tế rằng GAS (Google Apps Scripting) và GAE (Google App Engine) là hai điều hoàn toàn khác nhau. Mặc dù chúng âm thanh giống như chúng tương tự như Java là JavaScript.

GAS là các tập lệnh được nhúng trong Google Documents (hy vọng sẽ có thể nhập dưới dạng mô-đun độc lập trong tương lai). như sửa đổi/cập nhật tài liệu bên ngoài và phản hồi email tự động). Hãy nhớ rằng những thứ này cần phải nhẹ vì chúng chạy trên máy chủ của google. Nếu kịch bản của bạn mất nhiều thời gian để hoàn thành, việc thực thi sẽ bị cắt sớm (google xung quanh để tìm các giới hạn). Điều đó có nghĩa là bạn chỉ nên sử dụng vani JS (không có khung công tác như jQuery) và các chỉnh sửa hiệu suất bất cứ khi nào có thể.

GAE, mặt khác, giống như một máy chủ web (với một lớp cơ sở dữ liệu có sẵn) sống ở đâu đó trong đám mây. Nó tồn tại như một lớp trung gian (và đã được triển khai) thuận tiện cho các doanh nghiệp/sở thích để tạo ra các ứng dụng tùy chỉnh để thực hiện việc nâng hạng nặng hơn. Thật không may, API của Bảng tính bên ngoài quá hạn chế để hoàn thành những gì chúng tôi đang làm việc một mình vì vậy nó không phải là một tùy chọn.

Tự động hóa sử dụng Google Apps Scripting và trigger theo thời gian

Cách tiếp cận này nên công việc nhưng đòi hỏi một cách tiếp cận nhẹ hackish.

Mở sổ làm việc chứa bảng báo cáo của bạn. Nhấp vào [Tools] -> [Script editor ...]. Khi có goto [Triggers] -> [Current script's triggers ...].

Nếu bạn không có bất kỳ trình kích hoạt nào, hãy thêm một trình kích hoạt. Sau đó, trong trình đơn thả xuống 'Sự kiện', chọn 'Theo thời gian'.

Chào mừng bạn đến với thế giới xử lý sự kiện phía máy chủ. Một trong những tính năng gọn gàng mà bạn nhận được với các tài liệu dựa trên đám mây là khả năng kích hoạt các công việc cron trực tiếp trong tài liệu của bạn. Không cần phần mềm trung gian bên ngoài.

Nếu bạn không nhận thấy bây giờ, không có trình kích hoạt cho 'Tháng giờ'. Đây là nơi nó bị hacky. Để làm việc xung quanh việc thiếu tính năng này, chúng tôi sẽ yêu cầu chúng tôi kích hoạt trình kích hoạt hàng ngày và sử dụng một số JavaScript để khớp với ngày hiện tại với ngày hôm trước.

[mã sẽ đến đây]

Đầu tiên, đến hàm được gắn với trình xử lý sự kiện kích hoạt thời gian. Khối mã này chỉ đơn giản là phân tích ngày tháng, so sánh nó với ngày trước đó và lưu trữ giá trị trong một trang tính ẩn (mà chúng tôi sử dụng như là lớp kiên trì) cho so sánh ngày hôm sau. Nếu điều kiện tháng mới được đáp ứng thì khối mã tiếp theo sẽ chạy.

[Mã sẽ đi đây]

Yours sẽ rõ ràng là khác với tôi một chút nhưng khái niệm cơ bản là:

  • tải đối tượng bảng tính (không nên nhầm lẫn với một đối tượng Sheet)
  • Xác định đối tượng mẫu khuôn mẫu
  • Sao chép trang tính mẫu cho tên phù hợp dựa trên phạm vi ngày

Trong mỏ, bước tiếp theo của tôi là trích xuất dữ liệu từ tháng để tạo biểu đồ đường xếp chồng lên nhau để báo cáo trạng thái hiện tại cho các cấp trên của tôi.

Lưu ý: Do tính chất cộng tác đa người dùng của tài liệu nên sự kiện phải được kích hoạt phía máy chủ. Điều này tạo ra một vấn đề lớn đối với chúng tôi. Vì mã sự kiện chạy ở nơi khác nếu lỗi mã, chúng tôi không nhận được bất kỳ phản hồi nào từ trình duyệt của mình. Giải pháp duy nhất cho việc này là thiết lập thông báo trên trình kích hoạt để gửi email cho bạn ngay lập tức khi tập lệnh lỗi.

Cập nhật: Trong khi nghiên cứu điều này, tôi đã tìm thấy một kỹ thuật thú vị khác. Nếu tôi có thể quản lý để làm việc này mà không có bất kỳ lỗi nào, tôi có thể thử gọi trình kích hoạt bằng cách sử dụng ngày được đánh dấu trên Lịch Google.

0

(tháng 2 năm 2017) rephrasing câu hỏi với thuật ngữ hiện tại: Làm thế nào để bạn sao chép một tấm mẫu Google, sau đó sửa đổi nó (bản sao) lập trình? Câu trả lời ngắn gọn: dễ dàng hơn nhiều với API Google hiện tại, cụ thể là Google Drive v3 APIGoogle Sheets v4 API và bạn có thể làm điều đó với bất kỳ ngôn ngữ nào được hỗ trợ bởi Google APIs Client Libraries. API trang mới nhất cung cấp các tính năng không có sẵn trong bản phát hành cũ hơn, cụ thể là cấp cho nhà phát triển khả năng truy cập vào Bảng như thể bạn đang sử dụng giao diện người dùng (UI), tức là tạo hàng cố định, định dạng ô, thay đổi kích thước hàng/cột, thêm các bảng tổng hợp, xác tế bào, tạo biểu đồ, vv

như bạn có thể đoán, các Sheets API chủ yếu là dành cho lập trình truy cập vào các hoạt động bảng tính & chức năng như mô tả ở trên, nhưng để thực hiện tập tin -level truy cập như sao chép một trang mẫu, thay vào đó hãy sử dụng Google Drive API.

Mã giả (Python) để sao chép một tập tin (Sheet) sử dụng API Drive (giả sử đầu tiên chúng ta tìm kiếm các tập tin gần đây nhất là sửa đổi với tên mẫu, vì thế mà orderBy và lựa chọn kết quả đầu tiên [0] dưới đây):

TMPLFILE = 'my Sheets template' 
tmpl = DRIVE.files().list(q="name='%s'" % TMPLFILE).execute().get('files')[0] 
NEW_SHEET = {'name': 'Sheets data, Feb 2017'} 
SHEET_ID = DRIVE.files().copy(body=NEW_SHEET, fileId=tmpl['id']).execute().get('id') 

Mã giả để đọc các giá trị từ cơ sở dữ liệu SQL (SQLite) và ghi chúng vào Trang tính mới được tạo ở trên (bắt đầu từ ô 'A1' là "phía trên bên trái") như thể người dùng đã nhập các giá trị từ giao diện người dùng (do đó, công thức có thể được áp dụng, v.v.):

cxn = sqlite3.connect('db.sqlite') 
cur = cxn.cursor() 
rows = cur.execute('SELECT * FROM data').fetchall() 
cxn.close() 
DATA = {'values': rows} 
SHEETS.spreadsheets().values().update(spreadsheetId=SHEET_ID, 
    range='A1', body=DATA, valueInputOption='USER_ENTERED').execute() 

Nếu bạn tương đối mới đối với các API Google hiện đại, tôi có một số (01) ngày thân thiện với người dùng) intro video cho bạn. Có 2 video sau đó cũng có thể hữu ích, bao gồm cả video thể hiện bằng cách sử dụng API Drive. Đó là các video 2, 3 và 4 trong số this playlist. Video 23 & 25 là một cặp khác có API Drive và Trang tính.

Có thể tìm thấy tất cả các video mới hơn trong this playlist nơi bạn sẽ tìm thấy một cặp video khác có API trang tính cộng với việc sao chép mã "mẫu sao chép" ở trên nhưng sao chép mẫu Trang trình bày sau đó được sửa đổi với Slides API) (video 2).

Như đã đề cập trong câu trả lời khác, bạn cũng có thể sử dụng Google Apps Script để làm điều gì đó tương tự nếu bạn thích môi trường đó so với sử dụng API REST, mặc dù Apps Script hiện sử dụng API cũ hơn. Ngoài ra còn có một số lỗi nổi bật có thể khiến nó khó khăn hơn một chút (cụ thể là this onethis one).

Các vấn đề liên quan