- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前覆盖了名为 rpt.Workbook 的 xlsxwriter.Workbook。想向 xlsxwriter.Worksheet() 添加方法,但由于 xlsxwriter.Workbook() 导入工作表,不确定如何在不发生重大抽搐的情况下完成此操作。目前,我必须将工作表对象作为参数传递。
似乎我需要为 xlsxwriter.Workbook() 编写覆盖方法以指向 xlsxwriter.Worksheet() 的自定义类,但不知道如何做。
这是当前正在使用的覆盖 rpt.Workbook():
####################################################################
class Workbook(xlsxwriter.Workbook):
####################################################################
"""\nSpreadsheet class provides methods to build a spreadsheet.
"""
####################################################################
def __init__(self,filename=None, options={}):
####################################################################
try:
filename = rpt.fname(filename)
except FileNotFoundError as err:
log.error(err)
return False
log.info("Initializing excel file " + filename)
super().__init__(filename,options)
####################################################################
def add_tab(self,name=None,data=None,header=None,
srow=0,scol=0,autocol=True):
####################################################################
"""\nProvides method to add_worksheet and add_table in 1 call.
Required Attribute args:
name = TAB name
header = list of header names
data = list of lists for spreadsheet contents
Optional Attribute args:
srow = starting row for table, default 0
scol = starting col for table, default 0
autocol = True/False, auto set the column sizes
add_tab also adds the worksheet.header attribute to
allow the set_col_by_name function to work
"""
if not data:
log.warning("data=[][] required")
return None
if not header:
log.warning("header=[] required")
return False
columns = []
for field in header:
columns.append({ 'header' : field })
worksheet = self.add_worksheet(name)
worksheet.header = header
tableinfo= {
'data' : data,
'columns' : columns
}
lastcol = scol + (len(header) - 1)
lastrow = srow + (len(data) + 1)
worksheet.add_table(srow,scol,lastrow,lastcol,tableinfo)
#if autocol:
#self.auto_set_columns(worksheet=worksheet,data=data,scol=scol)
worksheet.freeze_panes(0,1)
return worksheet
####################################################################
def auto_set_columns(self,worksheet=None,data=None,header=None,scol=0):
####################################################################
"""\nDetermines the max length of each column and then set
that column width.
Required Attribute args:
worksheet = worksheet object
data = list of lists data
Optional Attribute args:
scol = Column start
header = row of headers for data list of lists.
If header not specified, worksheet
must have been created with self.add_tab()
"""
if not header and worksheet.header:
header = worksheet.header
## table = [] list of lists, combine header and data
table = []
table.append(header) for row in data:
table.append(row)
ziptable = list(zip (*table))
colsizes = []
for idx,val in enumerate(table[0]):
size = max(len(s) for s in ziptable[idx])
colnum = idx + scol
log.debug("Setting column => {} col size => {} => {}".format(colnum,val,size))
worksheet.set_column(colnum,colnum,size)
我想向 xlsxwriter.Worksheet() 添加一个名为 auto_set_columns() 的方法。目前,我必须将工作表对象 (worksheet=worksheet) 作为对象传递才能使其正常工作。我想改用 worksheet.auto_set_columns() 。目前auto_set_columns()是rpt.Workbook的一个方法。
希望 auto_set_columns() 成为 xlsxwriter.Worksheet 的扩展方法。
脚本端使用目前看起来像这样并且有效:
excelfile = nashomes + '/nas_homes.xlsx'
spreadsheet = rpt.Workbook(excelfile)
worksheet = spreadsheet.add_tab(name='Nas Homes',data=hrpt.data,header=hrpt.header)
spreadsheet.auto_set_columns(worksheet=worksheet,data=hrpt.data,scol=0)
我想要的,注意最后一行的变化:
excelfile = nashomes + '/nas_homes.xlsx'
spreadsheet = rpt.Workbook(excelfile)
worksheet = spreadsheet.add_tab(name='Nas Homes',data=hrpt.data,header=hrpt.header)
worksheet.auto_set_columns(data=hrpt.data,scol=0)
此处所需的目标是工作表对象(即 xlsxwriter.Worksheet() )可以具有扩展的“auto_set_columns”方法。但是,由于工作表对象是从 xlsxwriter.Workbook() 类中的 add_worksheet() 方法创建的,因此我无法弄清楚如何在没有主要覆盖方法的情况下将 xlsxwriter.Worksheet() 扩展到 xlsxwriter.Workbook() 。当 Workbook.add_worksheet() 创建 Worksheet 对象时,如何让 xlsxwriter.Workbook() 引用我的扩展 xlsxwriter.Worksheet()?
最佳答案
猴子在从 add_tab 返回之前修补工作表怎么样?
首先在任何类定义之外创建独立函数:
import types
def auto_set_columns(self,data=None,header=None,scol=0):
if not header and self.header:
header = self.header
## table = [] list of lists, combine header and data
table = []
table.append(header)
for row in data:
table.append(row)
ziptable = list(zip (*table))
colsizes = []
for idx,val in enumerate(table[0]):
size = max(len(s) for s in ziptable[idx])
colnum = idx + scol
print "Setting column => {} col size => {} => {}".format(colnum,val,size)
self.set_column(colnum,colnum,size)
然后在您的 Worksheet.add_tab 函数中,在返回之前修补该方法:
....
worksheet.freeze_panes(0,1)
worksheet.auto_set_columns = types.MethodType( auto_set_columns, worksheet )
return worksheet
现在你应该可以运行了:
worksheet = spreadsheet.add_tab(name='Nas Homes',data=hrpt.data,header=hrpt.header)
worksheet.auto_set_columns(data=hrpt.data,scol=0)
关于python - 扩展 xlsxwriter.Worksheet() 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32635770/
我知道使用对象变量是良好的编码习惯。我正在尝试创建一个名为 wsc 的对象变量,该变量将使用对事件工作簿的工作表集合的对象引用进行初始化。请参阅下面的代码。 我尝试将对象变量数据类型设置为工作表,但它
我在遍历 for 循环中的一系列项目时遇到问题: 该程序应该如何工作- 我从工作表 1(“跟踪电子表格”)开始,根据工作表 1 的变化(在单元格中选择"is"),它会将您转移到工作表 2(“延期提交”
我现在在 Excel 中使用宏仅大约 4 个月,基本上是通过查找现有代码并弄清楚其工作原理来自学。我现在有点陷入困境。 我的 Excel 工作簿中有一份报告。我需要根据 D 列中出现的数据跨多个工作表
工作簿workbook = this.getWorkBook(文件,路径); 工作表sheet = workbook.getSheet("WorkArea"); //sheet.save(); //s
use strict; use warnings; use Spreadsheet::ParseExcel; use Spreadsheet::ParseExcel::SaveParser; my $
我有 2 个工作簿....OdysseyDeposit 我的源数据所在的位置和 Civil Bank Accnt Recon,其中包含 OdysseyDeposit 的 VLOOKUP。 这是我正在使
我正在使用 Excel for Mac 2011,我在一张纸上有几个复选框。我正在尝试使用以下代码使它们自动化: Private Sub CheckBox12_Click() Dim ws A
我有一个简单的类 calc 可以对输入进行平方和立方: object calc2 { def square(nmr: Int) = { calc.square(nmr) } def
对于以下代码,我收到此错误 Method or Data Member not found. Private Sub Workbook_Open() Dim ws1 As Worksheet:
我的第一个问题是 Cells(i, 4) 命令的作用是什么,一直到 Cells(i, 7)。 Option Explicit Sub batch1() Sheets("Batch").Acti
我可能是瞎子,但我已经使用 VBA 几年了,但仍然写出来 Workbook("Book1").Sheets("Sheet1").Range("A1").Value 或者(将 Book1 调暗为工作簿,
此正则表达式出现错误: Matcher worksheetMatcher = Pattern.compile(output).matcher("var worksheet = (.*)\\};");
如何在 PHPExcel (1.7.7) 中删除一行或多行以使 getHighestDataRow 值递减? removeRow() 的使用似乎并没有真正调整 getHighestDataRow 值。
使用 C# 编写一个方法,从工作簿中取出单个工作表并将其另存为 HTML。 我正在使用 MSDN 中描述的 Worksheet.SaveAs 方法. 但是,当我查看输出时,它已经消失并保存了工作簿中的
我有一个名为 Sheet1 的选项卡。它从名为 Data_Summary 的选项卡中过滤数据. 如果我在 Sheet1 的单元格 A2 中输入此 FILTER() 函数,然后按回车键: =FILTER
我正在尝试使用 xlsxwriter 将格式写入一系列单元格。 worksheet.write_blank('A4:B4',None,cell_formatwhite) 此 write_blank 方
函数之间有什么区别:Worksheet_BeforeDoubleClickWorkbook_SheetBeforeDoubleClick? 最佳答案 Worksheet_BeforeDoubleCli
我想知道您能否帮我弄清楚为什么 worksheet.activate 在下面的情况下什么都不做。我关掉 .ScreenUpdating = False .EnableEvents = False .D
在 Intellij Scala Worksheet 支持中,运行类型(即 PLAIN 与 REPL)之间有什么区别? 最佳答案 Plain 评估模型在评估表达式之前一次性编译整个工作表,而 REPL
如果我在 VBA 编辑器中编写此内容: Dim ws As Worksheet: set ws = ActiveSheet ws.Columns( IntelliSense 向我显示了一个看似不相关的
我是一名优秀的程序员,十分优秀!