2017-01-09 17 views
3

我是Python新手。如何用python標準庫創建excel文件?

我用putty來管理一些服務器。我想用Python在每臺服務器上創建一個Excel文件,爲此,我認爲如果我可以使用某些命令(如ssh ip "python abc.py")來創建該文件。可以編寫一個bash腳本來管理所有服務器。這是我遇到的麻煩:

服務器不能使用互聯網。

而且它不允許使用任何第三方庫。當安裝linux(redhat 6.5)時,python中是否有可用於立即創建Excel的庫? 請幫助我,謝謝。

+0

你不能使用CSV? –

+0

對不起,老闆想要excel,TT –

+0

Excel可以打開CSV文件... –

回答

4

不幸的是這是不可能的了。創建Excel文件可能需要在客戶端運行兩個部分:

  • 安裝Office Excel(如果支持Open XML格式,可以放寬);
  • 用於Excel的Python包裝器,例如xrldopenpyxls

Python標準庫不包括Office產品的包裝。相反,他們提供逗號分隔值文件的商品,這些文件很容易用Excel讀取。

Openpyxl項目與Open XML format一起使用,然後不需要安裝Office。引用它的文檔:

Openpyxl是一個Python庫用於讀取和寫入Excel 2010中 XLSX/XLSM/XLTX/XLTM文件。

它是由於Python的Office Open XML格式不支持從 本地讀取/寫入現有庫而產生的。

然後你只需要用這個包更新你的Python安裝程序就可以創建電子表格。

如果您的服務器無法訪問Internet,但接受外部媒體進行安裝,那麼你就可以在另一臺機器上下載source並將其存儲在可移動介質上,安裝介質服務器上,然後解壓縮並使用python setup.py安裝接口:

tar -xvzf openpyxl.tar.gz /somepath 
cd /somepath/to/installer 
python setup.py install 

它適用於Debian(沒有辦公室安裝,使用管狀的源):

>>> import openpyxl 
>>> wb = openpyxl.Workbook() 
>>> wb.save('test.xlsx') 

產生一個空的電子表格用Excel可讀。

+0

如果您使用win32com,則不需要python包裝。 –

+0

@DavidZemens,更新了我的答案,減少了限制。也許你可以用這個解決方案提出另一個答案。順便說一句:是win32com另一個通用包裝? – jlandercy

+0

它可能不是...但你的主要觀點仍然存在:即使使用win32com庫,你仍然需要安裝Excel/Office。 –

1

其實有一種方法。如果你有一個空的excel文件,你可以打開它作爲一個zip文件,這是內容

. 
    ├── [Content_Types].xml 
    ├── docProps 
    │   ├── app.xml 
    │   ├── core.xml 
    │   └── custom.xml 
    ├── _rels 
    └── xl 
     ├── calcChain.xml 
     ├── charts 
     │   ├── chart1.xml 
     │   ├── chart2.xml 
     │   ├── colors1.xml 
     │   ├── colors2.xml 
     │   ├── _rels 
     │   │   ├── chart1.xml.rels 
     │   │   └── chart2.xml.rels 
     │   ├── style1.xml 
     │   └── style2.xml 
     ├── drawings 
     │   ├── drawing1.xml 
     │   ├── drawing2.xml 
     │   └── _rels 
     │    ├── drawing1.xml.rels 
     │    └── drawing2.xml.rels 
     ├── printerSettings 
     │   └── printerSettings1.bin 
     ├── _rels 
     │   └── workbook.xml.rels 
     ├── sharedStrings.xml 
     ├── styles.xml 
     ├── theme 
     │   └── theme1.xml 
     ├── workbook.xml 
     └── worksheets 
      ├── _rels 
      │   ├── sheet1.xml.rels 
      │   └── sheet2.xml.rels 
      ├── sheet1.xml 
      └── sheet2.xml 

在這個文件我有壽其比較的工作簿的標籤頁。

的workbook.xml,在XL目錄,具有在其上的片材的名稱和它看起來像這樣:

<sheets><sheet name="Test1" sheetId="1" r:id="rId1"/><sheet name="Test2" sheetId="2" r:id="rId2"/></sheets> 

和每個片材(1/2).XML,在工作表中的目錄包含列/行
,它看起來像這樣:

<dimension ref="A1:J1352"/> 
    <sheetViews> 
     <sheetView topLeftCell="A3" workbookViewId="0"> 
     <selection activeCell="F28" sqref="F28"/> 
     </sheetView> 
    </sheetViews> 
    <sheetFormatPr defaultRowHeight="14.4" x14ac:dyDescent="0.3"/> 
    <cols> 
     <col min="1" max="1" width="27.6640625" customWidth="1"/> 
     <col min="2" max="2" width="15.109375" customWidth="1"/> 
     <col min="3" max="3" width="14.6640625" customWidth="1"/> 
     <col min="4" max="4" width="15.33203125" customWidth="1"/> 
     <col min="7" max="7" width="13.6640625" customWidth="1"/> 
    </cols> 
    <sheetData> 
     <row r="1" spans="1:10" x14ac:dyDescent="0.3"> 
      <c r="A1" t="s"> 
       <v>1</v> 
      </c> 
     </row> 
     <row r="2" spans="1:10" x14ac:dyDescent="0.3"> 
     <c r="B2" t="s"> 
      <v>4</v> 
     </c> 
     <c r="C2" t="s"> 
      <v>5</v> 
     </c> 
     <c r="D2" t="s"> 
      <v>6</v> 
     </c> 
     </row> 
     <row r="3" spans="1:10" x14ac:dyDescent="0.3"> 
     <c r="A3" s="1"> 
      <v>42969.681041666663</v> 
     </c> 
     <c r="B3"> 
      <v>892.76</v> 
     </c> 
     <c r="C3"> 
      <v>138.62</v> 
     </c> 
     <c r="D3"> 
      <v>138.62</v> 
     </c> 
     </row> 
     <row r="4" spans="1:10" x14ac:dyDescent="0.3"> 
     <c r="A4" s="1"> 
      <v>42969.68173611111</v> 
     </c> 
     <c r="B4"> 
      <v>954.83</v> 
     </c> 
     <c r="C4"> 
      <v>88.97</v> 
     </c> 
     <c r="D4"> 
      <v>88.97</v> 
     </c> 
     <c r="G4" s="4"/> 
     <c r="H4" s="3" t="s"> 
      <v>9</v> 
     </c> 
     <c r="I4" s="3" t="s"> 
      <v>10</v> 
     </c> 
     <c r="J4" s="3" t="s"> 
      <v>11</v> 
     </c> 
     </row> 
     <row r="5" spans="1:10" x14ac:dyDescent="0.3"> 
     <c r="A5" s="1"> 
      <v>42969.682430555556</v> 
     </c> 
     <c r="B5"> 
      <v>875.17</v> 
     </c> 
     <c r="C5"> 
      <v>94.14</v> 
     </c> 
     <c r="D5"> 
      <v>94.14</v> 
     </c> 
     <c r="G5" s="3" t="s"> 
      <v>2</v> 
     </c> 
     <c r="H5" s="3"> 
      <f>AVERAGE(B3:B1352)</f> 
      <v>699.96431851851924</v> 
     </c> 
     <c r="I5" s="3"> 
      <f>MAX(B3:B1352)</f> 
      <v>1270.3399999999999</v> 
     </c> 
     <c r="J5" s="3"> 
      <f>MIN(B3:B1352)</f> 
      <v>177.93</v> 
     </c> 
     </row> 
    </sheetData> 
    <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/> 
    <pageSetup orientation="portrait" r:id="rId1"/> 
    <drawing r:id="rId2"/> 
</worksheet> 

所以,如果你能正確地使用標籤修改XML文件,你可以使用文本編輯器和壓縮程序修改或創建一個Excel工作表

+0

令人驚歎!因此,excel是一個zip文件...這是一個很好的嘗試方法,但有點複雜,謝謝! –