2016-04-25 21 views
1

私は、Windows 7、Pythonの2.7およびMicrosoft Excelの2013年は、PythonのオブジェクトにExcelファイルを保護

私は開き、以下のサンプルコードを使用して、パスワード保護されたExcelシートにアクセスすることができhereから知っている使用しています:

import sys 
import win32com.client 
xlApp = win32com.client.Dispatch("Excel.Application") 
print "Excel library version:", xlApp.Version 
filename, password = sys.argv[1:3] 
xlwb = xlApp.Workbooks.Open(filename, Password=password) 
# xlwb = xlApp.Workbooks.Open(filename) 
xlws = xlwb.Sheets(1) # counts from 1, not from 0 
print xlws.Name 
print xlws.Cells(1, 1) # that's A1 

Excelワークシートをパスワード保護されたファイルからPythonオブジェクトとして保存したいと考えています。理想的にはpandas dataframeとして保存されますが、辞書やその他のオブジェクトタイプとしても問題ありません。

私はパスワードを持っています。これは可能ですか?

ありがとうございます!

+1

方法(パスワードなしで)一時的なファイルに書き込み、その後、パンダからそれを読んでどうですか?物理的なファイルでなくても、Pythonは実際にディスクに書き込まずにファイルバッファオブジェクトを与えることができます(StringIO参照) – Shovalt

答えて

3

は(xlwbがすでに存在している)既存のコードに次の行を追加します

import os 
import pandas as pd 
from tempfile import NamedTemporaryFile 

# Create an accessible temporary file, and then delete it. We only need a valid path. 
f = NamedTemporaryFile(delete=False, suffix='.csv') 
f.close() 
os.unlink(f.name) # Not deleting will result in a "File already exists" warning 

xlCSVWindows = 0x17 # CSV file format, from enum XlFileFormat 
xlwb.SaveAs(Filename=f.name, FileFormat=xlCSVWindows) # Save the workbook as CSV 
df = pd.read_csv(f.name) # Read that CSV from Pandas 
print df 

ベア心​​の中で私のためにあなたのコードが完全には機能しなかった、と私はパスワードの入力を求めてしまったこと。しかし、あなたがパスワードで保護されたファイルを読むことを管理していると仮定すると、上のコードは動作します。

エクセル名前を付けて保存参照:https://msdn.microsoft.com/en-us/library/bb214129(v=office.12).aspx

+0

私はあなたのコードを試しましたが、彼は次のように記述しています: xlwb.SaveAs(Filename = f.name 、FileFormat = xlCSVWindows) エラーが発生しました: '-2147417848、'呼び出されたオブジェクトがクライアントから切断されました。 – Sylvain

+0

@ Silvain質問で説明したように 'xlwb'を初期化しましたか?質問のように名前と最初のセルを印刷してみてください。また、 'delete = False'を必ず使用しましたか?私はちょうどここに推測を投げているが、私たちがそれらの上に立っている場所を見てみましょう。 – Shovalt

+0

@Shovaltこんにちは!xlsxファイルでやりたいのですが?何が変わるでしょうか? – DimKoim

関連する問題