Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python列表导出到Excel_Python_Excel_Com - Fatal编程技术网

将Python列表导出到Excel

将Python列表导出到Excel,python,excel,com,Python,Excel,Com,我正在尝试通过Win32COM客户端将列表导出到excel,我在页眉处导入了该客户端。 我创建的对象编码如下,但我似乎无法让它将每个值导出到电子表格中自己的行中。如果我能得到一个好的指针(而不是放弃python!!:D),我将非常感激 class XcelExport(): def excel(self): app = 'Excel' xl = win32.gencache.EnsureDispatch('%s.Application' % app)

我正在尝试通过Win32COM客户端将列表导出到excel,我在页眉处导入了该客户端。 我创建的对象编码如下,但我似乎无法让它将每个值导出到电子表格中自己的行中。如果我能得到一个好的指针(而不是放弃python!!:D),我将非常感激

class XcelExport():
    def excel(self):
        app = 'Excel'
        xl = win32.gencache.EnsureDispatch('%s.Application' % app)
        ss = xl.Workbooks.Open(r'C:\MyFile.xls')
        sh = ss.ActiveSheet
        xl.Visible = True
        sleep(.1)  
        sh.Cells(1,1).Value = 'Export-to-%s : Items' % app
        sleep(.1)
        for i in EventTableRFT:
            sh.Range("A").Value = i 
        sh.Cells(i+2,1).Value = "End of the List!"

xprt = XcelExport()
xprt.excel()

您缺少范围内的两个单元格行数,并且需要在循环的每次迭代后增加单元格行数

sh.Range("A1").Offset(0,x).Value = i
这一改变应该奏效

class XcelExport():
    def excel(self):
        app = 'Excel'
        xl = win32.gencache.EnsureDispatch('%s.Application' % app)
        ss = xl.Workbooks.Open(r'C:\MyFile.xls')
        sh = ss.ActiveSheet
        xl.Visible = True
        sleep(.1)  
        sh.Cells(1,1).Value = 'Export-to-%s : Items' % app
        sleep(.1)
        x=0
        for i in EventTableRFT:
            sh.Range("A1").Offset(0,x).Value = i #You need to increment the cell row
            x+=1
        sh.Cells(i+2,1).Value = "End of the List!"

xprt = XcelExport()
xprt.excel()

既然你似乎喜欢我的回答/评论,这里有一个恰当的答案:

拥有你所需要的一切。如果你想要更完整但似乎有限的东西,有。XLRD和XLWT是很棒的软件包,但它们不支持*.xlsx文件。IronSpread仅适用于Windows,仅支持'07和'10版本的Excel。每个人都有自己的警告。最后,您可以同时使用这两种方法(编辑为*.xlsx,然后另存为*.xls(我有人在处理大型*.xls文件时遇到速度问题,但我的脚本在大约1分钟内就从该文件中写入了200mb的文本)

哦,我肯定会阅读(浏览)文档中有趣的功能,比如获取xlrd/xlwt的单元类型等。这是值得的,只要因为它很短,并且可以节省你实验的学习时间

xlwt的超短示例:

import xlwt
from tempfile import TemporaryFile
book = xlwt.Workbook()
sheet1 = book.add_sheet('sheet1')

supersecretdata = [34,123,4,1234,12,34,12,41,234,123,4,123,1,45123,5,43,61,3,56]

for i,e in enumerate(supersecretdata):
    sheet1.write(i,1,e)

name = "random.xls"
book.save(name)
book.save(TemporaryFile())
xlrd的超短示例:

import xlrd
from xlrd import open_workbook
book = open_workbook('random.xls')
sheet1 = book.sheet_by_index(0)
data = []

for i in xrange(sheet1.nrows):
    data.append(sheet1.cell(i,1).value)

是否有任何理由使用Win32COM而不是xlwt<代码>用于枚举(数据列表)中的i,e:工作表。当然,在打开书本和工作表后,写入(i,1,e)将执行您想要的操作。为什么不将其作为csv写入并使用excel自己的导入工具?@Logan感谢mate。这很好,我将根据需要研究xlwt/xlrd功能。谢谢,你是想把
x++
写成
x+1
。运行时发生的错误:`File“C:\MyFile.py”,第195行,在excel sh.Range(“A1”).Offset(0,Rowx).Value=I#您需要递增单元格行文件“C:\Python27\lib\site packages\win32com\gen_py\00020813-0000-0000-C000-0000000000 46x0x1x7\Range.py”,第686行,在call,ColumnIndex)文件中“C:\Python27\lib\site packages\win32com\client_init_uu2;.py”,第459行,在ApplyTypes self.\u oleobj_u2;.InvokeTypes(dispid,0,wFlags,retType,argTypes,*args),`pywintypes.com_错误:(-2147352567,“发生异常”。,(0,无,无,无,0,-2146827284),无)`顺便问一下,我运行Win和Office 64位是否会影响COM连接?(我知道我最近使用ActiveX的另一个软件有这个问题)我已经更新了我的帖子,以解决您在第一条评论中提到的问题。IronSpread的哇。这真是令人印象深刻。让用户保持在Excel环境中真的很好,因此在查看编码时不会流鼻血。先生,请您回答+1000。注意,我刚刚注意到Office 64位版本存在一些轻微的兼容性问题,在ex上抛出了一些错误它正在使用Excel,但似乎可以工作。希望64位版本即将推出。其中有兼容性问题?Ironspread似乎不完全喜欢Excel 64位。在Excel open上,一个对话框显示“无法加载xll”“我禁用了所有其他加载项和COM加载项,但正如我所说,在我关闭对话框后,它可以完美地工作。好吧,给他们时间。这是一种新产品。
class Signal(object):
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def to_dict(self):
        return {
            'x': self.x,
            'y': self.y,
        }

def file_save_excel(dataset, filename, sheet_name, new_sheet):
    dataset = dataset.applymap(lambda x: x.encode('unicode_escape').
                               decode('utf-8') if isinstance(x, str) else x)

    print('Writing the processed dataset to excel file...')
    writer = pd.ExcelWriter(filename, engine='openpyxl')

    if os.path.exists(filename) and new_sheet:
        book = openpyxl.load_workbook(filename)
        writer.book = book

    dataset.to_excel(writer, sheet_name=sheet_name, index=False)
    writer.save()
    writer.close()
    return True

dataframe = pandas.DataFrame.from_records([s.to_dict() for s in signals])
file_save_excel(dataframe, 'FileName.xlsx', 'SheetName', True)