web-dev-qa-db-ja.com

python GSPREADを使用してGoogleスプレッドシートの最初の空の行を見つける方法は?

グーグルシートの最初の空の行を見つけるコードを書くのに苦労しています。

Github.com/burnash/gspreadのgspreadパッケージを使用しています

誰かが助けてくれたら嬉しいです:)

現在、モジュールをインポートしてワークシートを開いたところです

scope = ['https://spreadsheets.google.com/feeds']

credentials = ServiceAccountCredentials.from_json_keyfile_name('ddddd-61d0b758772b.json', scope)

gc = gspread.authorize(credentials)

sheet = gc.open("Event Discovery")
ws = sheet.worksheet('Event Discovery')

関数を含むワークシートの最初の空の行である行1158を見つけたいと思います。つまり、古い空の行が埋められるたびに、次の空の行が見つかります ここを参照

11
Thành Đạt

私はこれを使用して解決しました:

def next_available_row(worksheet):
    str_list = filter(None, worksheet.col_values(1))
    return str(len(str_list)+1)

scope = ['https://spreadsheets.google.com/feeds']
credentials = ServiceAccountCredentials.from_json_keyfile_name('auth.json', scope)
gc = gspread.authorize(credentials)
worksheet = gc.open("sheet name").sheet1
next_row = next_available_row(worksheet)

#insert on the next available row

worksheet.update_acell("A{}".format(next_row), somevar)
worksheet.update_acell("B{}".format(next_row), somevar2)
19
Pedro Lobito

この代替方法は、値をスキップした可能性のある行(ドキュメント内の派手なヘッダーセクションなど)を考慮し、最初の[〜#〜] n [をサンプリングすることで、受け入れられた回答の問題を解決します。 〜#〜]列:

def next_available_row(sheet, cols_to_sample=2):
  # looks for empty row based on values appearing in 1st N columns
  cols = sheet.range(1, 1, sheet.row_count, cols_to_sample)
  return max([cell.row for cell in cols if cell.value]) + 1
1
Jonathan B.

以前のすべての行が入力されていることを期待できる場合:

len(sheet.get_all_values()) + 1

あなたに最初の無料の行を与えます

get_all_valuesはシートのデータの2Dリストを返します。ネストされた各リストは行であるため、2Dリストの長さはデータを含む行の数です。

同様の問題は最初の空き列です:

from xlsxwriter.utility import xl_col_to_name
# Square 2D list, doesn't matter which row len you check
column_count = len(sheet.get_all_values()[0]) 
column = xl_col_to_name(column_count)
0
David Jay Brady
import pygsheets        
gc = pygsheets.authorize(service_file='************************.json')
ss = gc.open('enterprise_finance')
ws = ss[0]
row_count = len(ws.get_all_records()) + 2
ws.set_dataframe(raw_output,(row_count,1), copy_index = 'TRUE', copy_head = 'TRUE')
ws.delete_rows(row_count , number=1)
0
Rakshit Jain
def find_empty_cell():
    alphabet = list(map(chr, range(65, 91)))
    for letter in alphabet[0:1]: #look only at column A and B
        for x in range(1, 1000):
            cell_coord = letter+ str(x)
            if wks.acell(cell_coord).value == "":
                return(cell_coord)

私はこのちょっとずさんな関数を使って最初の空のセルを見つけます。他の列にはすでに値があるため、空の行が見つかりません。

ああ、2.7と3.6の間には、アルファベットを文字列に変換する必要があるマッピングに関するいくつかの問題があります。

0
G_L