qianaonan 发表于 2021-10-8 22:12

请大佬看看这为什么pycharm报错'function' object has no attribute 'copy'

利用copy函数生成新的excel文件,但不知道为啥会报错
date = copy.copy(rd_book)
AttributeError: 'function' object has no attribute 'copy'
说函数没有copy属性,但是这只是我利用tk导入的文件目录,然后并想将该文件复制成新的excel文件从而不对源文件进行编辑,这个应该怎么解决?请大佬帮忙忙看看!
python新手写码,有点乱请多多包涵。

# -*- coding:utf-8 -*-
import wx
import os
import re
import xlrd
import xlwt
from xlutils.copy import copy
import tkinter
from tkinter import filedialog


class Frame(wx.Frame):
      root = tkinter.Tk()
      root.withdraw()
      global ml
      ml = filedialog.askopenfilename(initialdir='C:', title="请选择xls文件")
      def __init__(self):
            wx.Frame.__init__(self, None, title='', size=(536, 488),name='frame',style=541072384)
            self.启动窗口 = wx.Panel(self)
            self.Centre()
            self.标签2 = wx.StaticText(self.启动窗口, size=(59, 37), pos=(12, 15), label='销售:', name='staticText', style=2304)
            标签2_字体 = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', -1)
            self.标签2.SetFont(标签2_字体)
            self.编辑框2 = wx.TextCtrl(self.启动窗口, size=(159, 37), pos=(67, 14), value='', name='xs1', style=0)
            编辑框2_字体 = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', -1)
            self.编辑框2.SetFont(编辑框2_字体)
            self.编辑框3 = wx.TextCtrl(self.启动窗口, size=(162, 37), pos=(236, 14), value='', name='xs2', style=0)
            编辑框3_字体 = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', -1)
            self.编辑框3.SetFont(编辑框3_字体)
            self.标签3 = wx.StaticText(self.启动窗口, size=(51, 24), pos=(15, 99), label='客流:', name='staticText', style=2304)
            标签3_字体 = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', -1)
            self.标签3.SetFont(标签3_字体)
            self.编辑框4 = wx.TextCtrl(self.启动窗口, size=(331, 163), pos=(67, 57), value='', name='kl', style=1073741856)
            编辑框4_字体 = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', -1)
            self.编辑框4.SetFont(编辑框4_字体)
            self.编辑框5 = wx.TextCtrl(self.启动窗口, size=(331, 204), pos=(67, 228), value='', name='jh', style=1073741856)
            编辑框5_字体 = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', -1)
            self.编辑框5.SetFont(编辑框5_字体)
            self.按钮2 = wx.Button(self.启动窗口, size=(80, 32), pos=(420, 391), label='生成', name='button')
            self.按钮2.Bind(wx.EVT_BUTTON, self.按钮2_按钮被单击)
            self.标签5 = wx.StaticText(self.启动窗口, size=(46, 24), pos=(11, 298), label='计划:', name='staticText',
                                     style=2304)
            标签5_字体 = wx.Font(11, 74, 90, 400, False, 'Microsoft YaHei UI', -1)
            self.标签5.SetFont(标签5_字体)

      def 按钮2_按钮被单击(self,event):
            xs1 = self.编辑框2.GetValue()
            xs2 = self.编辑框3.GetValue()
            kl = self.编辑框4.GetValue()
            zdgz = self.编辑框5.GetValue()
            qdxs1 = xs1.replace(',', '')
            qdxs2 = xs2.replace(',', '')
            a=round((float(qdxs1)+float(qdxs2))/10000,2)#销售
            n1 = kl.replace(',', '')
            n = re.findall(r"\d+\.?\d*", n1)
            kl1 = n
            kl2 = n
            kl3 = n
            kl4 = n
            kl5 = n
            kl6 = n
            kl7 = n
            g = round((int(''.join((str(i) for i in kl1))) + int(''.join((str(i) for i in kl2)))+int(''.join((str(i) for i in kl3)))+int(''.join((str(i) for i in kl4)))+int(''.join((str(i) for i in kl5)))+int(''.join((str(i) for i in kl6)))+int(''.join((str(i) for i in kl7))))/10000,2)


            #a为销售数,g为客流数,zdgz为下周计划
            #-----------------以下为excel编辑部分--------------------------------------------
            #xlrd读取部分
            if __name__ == "__main__":
                rd_book = xlrd.open_workbook(ml, formatting_info=True)
                date = copy.copy(rd_book)
                table = date.sheets()#获取第一个表单
                old_kl=table.cell(3,4).value#旧客流
                old_xs=table.cell(3,7).value#旧销售

                d = round(a/old_xs*100,2)#百分数
                bfxs =str(d)[:4*100]+ '%'
                e = round(g/old_kl*100,2)
                bfkl =str(e)[:4*100]+ '%'

                #xlwt写入部分
                #格式部分
                style = xlwt.XFStyle()
                font = xlwt.Font()
                font.name = '微软雅黑'
                font.height = 280
                style.font = font
                borders = xlwt.Borders()
                alignment = xlwt.Alignment()
                alignment.horz = 2
                alignment.vert = 1
                alignment.wrap = 1
                style.alignment = alignment
                borders = xlwt.Borders()
                borders.left = xlwt.Borders.THIN
                borders.right = xlwt.Borders.THIN
                borders.top = xlwt.Borders.THIN
                borders.bottom = xlwt.Borders.THIN
                style.borders = borders
                #写入部分
                wb = copy(date)
                Ws = wb.get_sheet(0)
                Ws.write(3,5,old_kl,style)
                Ws.write(3,8,old_xs,style)
                Ws.write(3,7,a,style)
                Ws.write(3,4,g,style)
                Ws.write(3,9,bfxs,style)
                Ws.write(3,6, bfkl, style)
                Ws.write(3,10,zdgz,style)
                wb.save('云泰2021年-融城园城茶马花街-x月x周主题街区数据周报.xls')
class myApp(wx.App):
      defOnInit(self):
            self.frame = Frame()
            self.frame.Show(True)
            return True

if __name__ == '__main__':
    app = myApp()
    app.MainLoop()

Jack2002 发表于 2021-10-8 22:45

本帖最后由 Jack2002 于 2021-10-8 22:47 编辑

报错信息不是说了吗?copy是个函数,没有copy属性。
你这么引入copy,copy就是个函数,直接copy()调用就行了,不是copy.copy()。

qianaonan 发表于 2021-10-8 22:50

Jack2002 发表于 2021-10-8 22:45
报错信息不是说了吗?copy是个函数,没有copy属性。
你这么引入copy,copy就是个函数,直接copy()调用就行 ...

明白了,非常感谢
页: [1]
查看完整版本: 请大佬看看这为什么pycharm报错'function' object has no attribute 'copy'