2014-05-12 10 views
3

Google 스프레드 시트 셀을 업데이트하는 데 Gdata API를 사용하고 있습니다. 새로운 Google 스프레드 시트가 출시되었으며 gid가 8 자리 이상인 것으로 보입니다.새 Google 스프레드 시트에서 gid를 od * (워크 시트 ID)로 변환하는 방법

다음은 샘플 새 장과 시트 2의 GID는 나는 다음과 같은 방법으로 변환 시도했지만 작동하지 않습니다 1794189920. https://docs.google.com/spreadsheets/d/1S6mvGGoOJa8JF6Qt6GGH5QT-X0HD4EjZhKNbihAwFuE/edit?usp=sharing

입니다. 이에 빛을 창고 또는 제안 도움이 될 수 있습니다 사람에게

How to convert Google spreadsheet's worksheet string id to integer index (GID)?

감사합니다.

건배. Junya

+0

여기에서 sheet = sheet1을 사용할 수 있습니다. https://developers.google.com/chart/interactive/docs/spreadsheets#Google_Spreadsheets_as_a_Data_Source "sheet = sheet_name : 여러 시트 문서 중 어느 시트를 연결할지 지정합니다."- I 당신이 원하는 것을 위해 이것을 사용할 수 있는지 모른다. – eddyparkinson

+0

안녕하세요, 감사합니다. 스프레드 시트 셀을 업데이트하여 Gdata API를 사용하고 싶습니다. (Visuzalozation API에는 업데이트 방법이 없습니다.) Gdata API에서 od * 스타일 워크 시트 ID가 필요합니다 ... – user2128521

+0

GID가있는 경우 PDF로 다운로드 할 수 있습니다. 그러면 시트 이름이 나옵니다. 그런 다음 시트 이름을 사용하여 od *를 가져올 수 있습니다. .... 어떻게 손으로, 또는 일부 API로 GID를 얻었습니까? – eddyparkinson

답변

1

.NET Framework Google.GData.Spreadsheets.WorksheetFeed의 WorksheetFeed 클래스를 살펴봄으로써 새로운 시트에서 gid를 얻는 방법을 발견했습니다. 기본적으로 스프레드 시트 서비스를 설정하고, 자격 증명을 적용하고, feedUrl을 전달하는 WorksheetQuery를 만들고, 서비스에 대한 쿼리를 호출하고 worksheetFeed.Entries에서 워크 시트를 반환합니다. 그런 다음 워크 시트의 XML을 스트리밍하여 거기에서 "? gid ="에 대한 xml을 검색하고 결과를 파싱 할 수 있습니다. 이 작업을 수행하는 좀 더 쉬운 방법이 있을지 모르지만 나는 그것을 발견하지 못했고 이것은 우리 상황에서 작동합니다.

Dim worksheetFeed As WorksheetFeed 
    Dim query As WorksheetQuery 
    Dim worksheet As WorksheetEntry 
    Dim output As New MemoryStream 
    Dim xml As String 
    Dim gid As String = String.Empty 

    Try 
    _service = New Spreadsheets.SpreadsheetsService("ServiceName") 
    _service.setUserCredentials(UserId, Password) 
    query = New WorksheetQuery(feedUrl) 
    worksheetFeed = _service.Query(query) 
    worksheet = worksheetFeed.Entries(0) 

    ' Save worksheet feed to memory stream so we can 
    ' get the xml returned from the feed url and look for 
    ' the gid. Gid allows us to download the specific worksheet tab 
    Using output 
     worksheet.SaveToXml(output) 
    End Using 

    xml = Encoding.ASCII.GetString(output.ToArray()) 
+0

파이썬에서이 작업을 수행하려고합니다. 내 질문보기 : http://stackoverflow.com/questions/36523723/how-to-get-the-xml-from-a-google-spreadsheet-with-python – Chris

2

좋아,이 ..

, 그래서 여기에 정말 무슨 일이 일어나고 있는지 이해하지 않기 때문에 나는 전혀 만족하지 해요,하지만 어쩌면 사람을 도움이 될 것입니다 때문에 빈민가 대답 간다

저는 루비 google_drive 젬을 사용하고 있습니다. 스프레드 시트에있는 모든 워크 시트를 CSV로 다운로드하려고합니다. 이 작업을 수행하려면 인코딩 된 GID (실제 WID라고 불렀음)에서 실제 GID로 변환해야합니다.

def wid_to_gid(wid) 
    wid_val = wid.length > 3 ? wid[1..-1] : wid 
    xorval = wid.length > 3 ? 474 : 31578 
    wid_val.to_i(36)^xorval 
end 

그래서 :

는 7 자리 WIDS를 처리하기 위해
def wid_to_gid(wid) 
    wid.to_i(36)^31578 
end 

, 나는이 그것을 변경 : 전에, 내 wid_to_gid 방법 (스택 오버플로 여기에 다른 답변에서 설명)이 모습 .. 몇 가지 일이 여기에 .. 나는 (적어도 내 스프레드 시트에서), 7 자리 WID에 대해, 나는 기본 문자를 버리고 474로 XORing하여 첫 번째 문자를 삭제하여 GID를 얻을 수 있음을 깨달았다. 왜이 마법의 번호 .. 미안).

WID가 3 자리수 인 경우 이전 변형이 작동합니다 (스택 오버플로에 대한 다른 많은 답변에서 자세히 설명했듯이).

내가 사용하고있는 스프레드 시트의 경우 3 개의 워크 시트가 있습니다. 다음은 각의 WIDS 및 GID는 다음과 같습니다

GID - WID 
0   - od6 
2019719111 - oxehkwt 
1506531046 - oowy6v0 

난 정말 그냥이 그래서 난 한 번 조사 나는이 일을하는 데 더 많은 시간을 할애하지 않았다 완수하고 싶었다. 다른 사람들이이 코드를 작동 여부에 따라 검증/거부 할 수 있다면 감사하겠습니다. 작동하지 않는다면 적어도 아이디어를 줄 것입니다.

1

당신이 gspread 파이썬을 사용하는 경우, 여기 당신이 무엇을 :

wid = worksheet.id 
widval = wid[1:] if len(wid) > 3 else wid 
xorval = 474 if len(wid) > 3 else 31578 
gid = int(str(widval), 36)^xorval 

은 아마 이것에 대한 PR을 열 수 있습니다.