Maya와 엑셀이나 스프레드 시트를 연계시켜 ~
6177 단어 파이썬mayapythonmaya
모처럼의 기회이므로, 뭔가 남기고 싶어 정리해 둡니다 ٩(๑•̀ω•́๑)۶
동기
○csv라도 좋지만, 디자이너도 읽고 싶고, 엑셀 사용하고 싶어~
○엑셀의 모션 리스트로부터 프레임수를 가져오고 싶어~
○ 출력하고 업하면 마음대로 GoogleSpreadsheet의 스테이터스 갱신해 주었으면 좋겠다~
등등 외부의 데이터를 참조·갱신하고 싶다·····! ! ! ! ! ! !
외부 모듈이란?
파이썬에는 타사 외부 모듈이 많이 있습니다.
mel에는 할 수 없는, 그런 일이나, 이런 일을 간단하게 할 수 있습니다.
import csv
import os
파이썬에서는 먼저 import를 삽입하여 다양한 모듈을 호출 할 수 있습니다.
csv와 os는 원래 모듈이므로 별도로 떨어질 필요가 없습니다.
Maya는 Python2 시스템이므로 모듈을 떨어 뜨리도록주의!
이번에는 maya의 스크립트 폴더에 모듈을 직접 넣습니다.
팀에서 관리하는 경우는 다른 디렉토리에서 관리하는 것이 좋기 때문에,
자세한 것은 이 근처를!
h tp // w w. 여기 m c. 다이킨. 이. jp / DC / 우세 rs에서 s / 리타로 / 쓰리 아 l / 마야 _04 /
htp://tm8r. 는 bぉ. jp/엔트리/2016/10/18/222755
이런 식으로 직접 scripts 폴더에 두고 있습니다.
이번 환경
○ Windows 7
○ Maya 2016
○각 모듈의(○.○.○)는 이번 사용하고 있는 버전입니다!
pip를 사용하여 설치하는 것이 좋습니다.
pip 사용법
h tp // w w. py 텐-이 zm. 코 m/콘텐 ts/바시 s/피 p. shtml
이번에는 간단하게 다른 곳에 설치한 것을 scripts로 이동시켰습니다.
excel 사용
xlrd (0.9.4)
xlwt (1.0.0)
xlutils (1.7.1)
엑셀 안에 있는 장면명으로부터 프레임수를 취득해, 그리고 오늘의 일자를 기입한다
.xls로 엑셀을 저장할 수 있습니다!
import xlrd
import xlwt
from xlutils.copy import copy
import maya.cmds as cmds
import os
import datetime
excel = "" # エクセルファイルのパス
scene = os.path.splitext(cmds.file(q=True, shortName=True, sceneName=True))[0] # シーン名を取得
read = xlrd.open_workbook(excel)
ex_row = 0 #どの行が更新させるか保存しておく
d = datetime.datetime.today() # 今日の日付を取得
today = d.strftime("%Y/%m/%d")
sheet_1 = read.sheet_by_index(0)
for col in range(sheet_1.ncols):
for row in range(sheet_1.nrows):
if scene == sheet_1.cell(row, col).value:
ex_row = row
print u"スタートフレーム:" + sheet_1.cell(row, 1).value + u" エンドフレーム:" + sheet_1.cell(row, 2).value
continue
# 必要があれば、出力の処理など
write = copy(read) # read用にとってきたオブジェクトを書き込み用のオブジェクトにスタイルも含め完コピ
sheet1 = write.get_sheet(0)
sheet1.write(ex_row, 3, today) # 4列めに今日の日付を追記する
write.save(excel)
spreadsheet 사용
이 근처를 참고로 했습니다!
ぃ tp // 이 m/이야 p로/있어 ms/d8d56f69f863f07에9378
기본적으로 위의 엑셀과 같은 작업을
gspread (0.4.1)
httplib2 (0.9.2)
oauth2client (4.0.0)
requests (2.12.1)
six (1.10.0)
import os
import datetime
import maya.cmds as cmds
import gspread
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
flow = OAuth2WebServerFlow(client_id='クライアントID',
client_secret='クライアントシークレット',
scope='https://spreadsheets.google.com/feeds',
redirect_uri="urn:ietf:wg:oauth:2.0:oob")
scene = os.path.splitext(cmds.file(q=True, shortName=True, sceneName=True))[0]
d = datetime.datetime.today() # 今日の日付を取得
today = d.strftime('%Y/%m/%d')
storage = Storage('cred.dat') # 認証情報を保存しておくファイル
credentials = storage.get()
if credentials is None or credentials.invalid == True:
authorize_url = flow.step1_get_authorize_url()
cmds.confirmDialog(m='Go to the following link in your browser: ' + authorize_url)
code = raw_input('Enter verification code: ').strip()
credential = flow.step2_exchange(code)
storage.put(credential)
credential.set_store(storage)
credentials = credential
gc = gspread.authorize(credentials)
spr = gc.open_by_key('スプレッドシートのID')
for j, worksheet in enumerate(spr.worksheets()):
worksheet.get_all_values()
list_of_lists = worksheet.get_all_values()
for i, l in enumerate(list_of_lists):
if l[0] == scene:
print u'スタートフレーム:' + l[1] + u' エンドフレーム:' + l[2]
continue
for j, worksheet in enumerate(spr.worksheets()):
worksheet.get_all_values()
list_of_lists = worksheet.get_all_values()
for i, l in enumerate(list_of_lists):
if l[0] == scene:
worksheet.update_acell('D' + str(i+1), today)
첫번째로 가면
이런 것이 나오는 것이 나오므로,
주소를 복사하여 브라우저에 붙여넣기
maya에서 confirm을 설정하면 다음과 같은 창이 나오므로 브라우저 코드를 복사합니다.
2회째 이후는 cred.dat의 정보를 보고 액세스 해 주기 때문에, 이 작업은 1회만
Maya와는 관련이 없지만 스프레드 시트의 데이터가
회사의 서버에 있는지 확인하여 상태를 업데이트하는 것도 만들었습니다.
Maya에서 여러 가지를 할 수 있다면 디자이너가 Python을 떨어 뜨리지 않고도 다양한 도구를 배포 할 수 있습니다!
너무 MayaPython 관계없이 미안 해요!
내 홍보
고양이의 손도 빌리고 싶은 거기 당신, 일을주세요! ! ! ! ! ! ! 트위터 : @yukarin33
Reference
이 문제에 관하여(Maya와 엑셀이나 스프레드 시트를 연계시켜 ~), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yukarin33/items/ea5b3e895f992ac25d4a텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)