2016-09-15 14 views
0

.xlsxシートの値を使用してSF Contactを作成しようとしています。"START_ARRAY値から文字列のインスタンスを逆シリアル化できません" Salesforce APIの問題

偽の電子メールアドレス、姓、名を手動で入力すると連絡先を作成できますが、xlsxシートから定義した値は参照できません。 印刷コマンドがうまく機能していて、読みたい適切なデータを読み込んでいます。

Pythonを2週間しか使っていませんでしたが、MySQLdbとの間でデータの読み取り、書き込み、保存ができましたが、今はこの問題に遭遇しています。どんな助けでも大歓迎です。

だから完全なエラーは次のとおりです。

ファイル "C:\ Python27 \ libには\サイト - パッケージ\ simple_salesforce-0.70-py2.7.egg \ simple_salesforce \ api.py"、行749、 _exception_handlerでraise exc_cls(result.url、result.status_code、name、response_content) simple_salesforce.api.SalesforceMalformedRequest:不正なリクエストhttps://na48.salesforce.com/services/data/v37.0/sobjects/Contact/。応答内容:[{u'errorCode ':u'JSON_PARSER_ERROR'、u'message ':[START_ARRAY値からラインストリングのインスタンスをデシリアライズu'Cannot:1、カラム:2]'}]

Email = sheet.col_values(1, 1) 
Last = sheet.col_values(2, 1) 
First = sheet.col_values(3, 1) 
print Email 
print Last 
print First 

sf.Contact.create({'LastName' : Last,'FirstName' : First,'Email' : Email}) 

オーケーエラーは修正されていますが、xlsxの各行の連絡先/ケースを作成するのではなく、xlsxシートの最後の行であるsalesforceに連絡先/ケースが1つだけ作成されます。それは大部分のすべてを正しく読み込み、実際に連絡先を正しい方法で作成しますが、最後の行だけを作成します。

現在のコード:

for c in range(sheet.ncols): 
    for r in range(sheet.nrows): 


    Email = sheet.col_values(1,r)[0] 
    print Email 
    Last = sheet.col_values(2,r)[0] 
    print Last 
    First = sheet.col_values(3,r)[0] 
    print First 
    Phone = sheet.col_values(4,r)[0] 
    print Phone 
    Street = sheet.col_values(5,r)[0] 
    print Street 
    City = sheet.col_values(6,r)[0] 
    print City 
    Postal = sheet.col_values(7,r)[0] 
    print Postal 
    Product = sheet.col_values(8,r)[0] 
    print Product 
    Store = sheet.col_values(9,r)[0] 
    print Store 
    SN = sheet.col_values(10,r)[0] 
    print SN 
    Name = sheet.col_values(3,r)[0]+sheet.col_values(2,r)[0] 



sf.Contact.create({'FirstName' : First, 'LastName' : Last, 'Email' : Email, 'Phone' : Phone, 'MailingStreet' : Street, 'MailingCity' : City, 'MailingPostalCode' : Postal}) 

答えて

0

サーバーからのエラーメッセージが言う

START_ARRAY値から文字列のインスタンスをデシリアライズできない[ライン:1、 コラム:2]

は、サーバーがフィールド値が文字列であると予想しているが、要求には配列があることを意味します。 インデントはPythonで重要である、あなたの作成呼び出しが理由だけで一回行われますのでsheet.col_values()は配列を返し、あなたは第二の問題のための更新

Email = sheet.col_values(1, 1)[0] 
Last = sheet.col_values(2, 1)[0] 
First = sheet.col_values(3, 1)[0] 

にそれを変更したいだろうと推測し

そのループの外側で、あなたはループ内でそれを動かす必要があります。

for c in range(sheet.ncols): 
    for r in range(sheet.nrows): 
    Email = sheet.col_values(1,r)[0] 
    print Email 
    Last = sheet.col_values(2,r)[0] 
    print Last 
    First = sheet.col_values(3,r)[0] 
    print First 
    Phone = sheet.col_values(4,r)[0] 
    print Phone 
    Street = sheet.col_values(5,r)[0] 
    print Street 
    City = sheet.col_values(6,r)[0] 
    print City 
    Postal = sheet.col_values(7,r)[0] 
    print Postal 
    Product = sheet.col_values(8,r)[0] 
    print Product 
    Store = sheet.col_values(9,r)[0] 
    print Store 
    SN = sheet.col_values(10,r)[0] 
    print SN 
    Name = sheet.col_values(3,r)[0]+sheet.col_values(2,r)[0] 
    sf.Contact.create({'FirstName' : First, 'LastName' : Last, 'Email' : Email, 'Phone' : Phone, 'MailingStreet' : Street, 'MailingCity' : City, 'MailingPostalCode' : Postal}) 
+0

あなたは天才です。ありがとうございました。シート内のすべての行の連絡先を作成します。今すぐ連絡先を作成した後でケースを作成するだけです。 –

関連する問題