如何仅使用python标准库创建excel文件?

如何仅使用python标准库创建excel文件?,python,excel,Python,Excel,我是Python新手 我使用putty来管理一些服务器。我想使用Python在每台服务器上创建一个Excel文件,为此,我想我是否可以使用一些命令,如ssh-ip“Python-abc.py”来创建该文件。可以编写bash脚本来管理所有服务器。这就是我遇到的麻烦: 服务器不能使用internet 不允许使用任何第三方库。安装linux(redhat 6.5)时,python中是否有任何库可用于立即创建Excel? 请帮助我,谢谢。如果您还没有尝试,请尝试CSV 不幸的是,这是不可能的。创建Exc

我是Python新手

我使用putty来管理一些服务器。我想使用Python在每台服务器上创建一个Excel文件,为此,我想我是否可以使用一些命令,如
ssh-ip“Python-abc.py”
来创建该文件。可以编写bash脚本来管理所有服务器。这就是我遇到的麻烦:

服务器不能使用internet

不允许使用任何第三方库。安装linux(redhat 6.5)时,python中是否有任何库可用于立即创建Excel?
请帮助我,谢谢。

如果您还没有尝试,请尝试CSV


不幸的是,这是不可能的。创建Excel文件可能需要在客户端运行两个部分:

  • 已安装Office Excel(如果支持开放式XML格式,则可以放宽)
  • Excel的Python包装器,如或
Python标准库不包括Office产品的包装器。相反,它们为逗号分隔的值文件提供商品,这些文件很容易用Excel读取

Openpyxl项目可以与一起工作,因此不需要安装Office。引用其文件:

Openpyxl是一个用于读写Excel 2010的Python库 xlsx/xlsm/xltx/xltm文件

它起源于缺乏现有的本地读写库 Python是officeopenxml格式

然后,您只需使用此软件包更新Python设置,就可以创建电子表格

如果您的服务器无法访问internet,但接受要装入的外部媒体,则您可以在另一台计算机上下载并将其存储在可移动媒体上,将媒体装入服务器,然后解压缩并使用python
setup.py
界面进行安装:

tar -xvzf openpyxl.tar.gz /somepath
cd /somepath/to/installer
python setup.py install
它适用于Debian(未安装office,使用pipy源代码):


生成Excel可读的空电子表格。

实际上有一种方法。如果您有一个空的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
在这个文件中,我有两张工作表,与工作簿上的选项卡相比较

xl目录中的workbook.xml上有工作表的名称,如下所示:

<sheets><sheet name="Test1" sheetId="1" r:id="rId1"/><sheet name="Test2" sheetId="2" r:id="rId2"/></sheets>
<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>

工作表目录中的每个工作表(1/2).xml都包含列/行
看起来是这样的:

<sheets><sheet name="Test1" sheetId="1" r:id="rId1"/><sheet name="Test2" sheetId="2" r:id="rId2"/></sheets>
<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>

1.
4.
5.
6.
42969.681041666663
892.76
138.62
138.62
42969.68173611111
954.83
88.97
88.97
9
10
11
42969.682430555556
875.17
94.14
94.14
2.
平均值(B3:B1352)
699.96431851851924
最大值(B3:B1352)
1270.3399999999999
最小值(B3:B1352)
177.93

因此,如果您可以使用标记正确地修改xml文件,您可以仅使用文本编辑器和压缩程序更改或创建excel工作表,我不确定这是否是OP想要的,但是如果您必须在python中操作数据而不安装任何模块(仅安装标准库),您可以尝试使用sqlite3模块,这当然允许您与sqlite文件(关系数据库管理系统)交互

这些数据库在概念上类似于Excel文件。如果excel文件基本上是一组工作表,每个工作表都是一个矩阵,您可以在其中放置数据,那么sqlite数据库是相同的(但每个“矩阵”都称为表)

这种格式是脚本友好的,因为您可以使用SQL读写数据,但它不遵循其他DBMS所基于的客户机-服务器模型。整个数据库包含在一个文件中,您可以通过电子邮件发送给同事,您还可以安装一个GUI,该GUI为您提供一个类似电子表格的界面,使其更加用户友好(适用于Windows、Linux和Mac的SQLite DB browser)


这允许您在python脚本中包含SQL代码,这增加了大量的数据处理功能,并且这是实现简单程序数据持久化的一种极好的方法。

我找到了一种不推荐的方法,但它确实解决了问题

例如,我使用第三个pacakge
openpyxl
来演示如何做到这一点。 不允许每台机器随意安装模块,但您可以上传任何文件

找到联网的机器,执行
pip安装openpyxl

cd您的pacakge dir,在我的机器上是
cd/usr/lib/python2.7/site packages/

压缩最近更新的目录或文件。您可以使用
ls-ltr | tail-10

drwxr-xr-x   3 root root   4096 Jan 12 11:21 shadowsocks
drwxr-xr-x   2 root root   4096 Jan 12 11:21 shadowsocks-2.8.2-py2.7.egg-info
-rw-r--r--   1 root root  12462 Apr 21 10:38 jdcal.py
-rw-r--r--   1 root root  13004 Apr 21 10:38 jdcal.pyc
drwxr-xr-x   2 root root   4096 Apr 21 10:38 jdcal-1.4.1.dist-info
drwxr-xr-x   3 root root   4096 Apr 21 10:38 et_xmlfile
drwxr-xr-x   2 root root   4096 Apr 21 10:38 et_xmlfile-1.0.1-py2.7.egg-info
drwxr-xr-x  20 root root   4096 Apr 21 10:38 openpyxl
drwxr-xr-x   2 root root   4096 Apr 21 10:38 openpyxl-2.6.4-py2.7.egg-info
我们将发现
openpyxl
及其依赖项
jdcal
et\u xmlfile

所以我按顺序压缩文件
zip-qr openpyxl-2.6.4.zip jdcal.py jdcal.pyc et_xmlfile openpyxl

然后将此文件上载到未连接的计算机,以供以下人员使用:

>>> import os,sys
>>> sys.path.insert(0,'/root/openpyxl-2.6.4.zip')
>>> import openpyxl

它成功了。

你不能使用CSV吗?对不起,老板想要一个excel,tExcel可以打开CSV文件…谢谢,我会试试。如果你使用win32com,你不需要python包装器。@DavidZemens,更新了我的答案以减少限制。也许你可以用这个解决方案提出另一个答案。顺便问一下:win32co是吗