使用 openpyxl 或 xl* 或 xlsxwriter 在工作簿中移动工作表?

2023-11-22

我已经阅读了文档,openpyxl, xlwt, xlrd, xlutils, XLSX作家。我找不到移动工作表的方法Excel工作簿。测试在末尾添加了一个工作表。

具体来说,我有一个日历之类的,['JAN','FEB',...,'DEC']当需要时我需要更换几个月。

如果不这样做,如何对 Excel 工作簿中的工作表进行排序move他们?可以插入一张纸吗after or before指定的表?

只有另外一个我可以在SO上找到帖子 uses win32com and Book.Worksheets.Add(After=Sheet);看起来很奇怪,这些模块都没有这个方法。

默认似乎在工作簿末尾添加工作表。我可以复制目标文件,直到到达更新的工作表,插入新工作表,然后继续原始复制到最后。 (灵感来自这个帖子)


我有两个问题。第一个问题是在给定位置插入一张纸。第二个问题是移动一张纸。因为我主要处理较新的 Excel 文件xlsx,那么我将使用 openpyxl。

各种消息来源表明新的工作表被添加到末尾。我预计每次都需要这样做,然后移动纸张。我问了这个问题“(如何)移动工作表......”认为这可以解决这两个问题。

最终,一旦我终于找到了一个显示的示例,第一个问题就很容易了workbook.create_sheet()方法需要一个可选的index在给定的零索引位置插入新工作表的参数。 (我真的要学会看代码,因为答案就在这里):

 def create_sheet(self, title=None, index=None):
        """Create a worksheet (at an optional index)
        [...]

下一个。事实证明,您可以通过重新排序工作簿容器来移动工作表_sheets。所以我做了一个小辅助函数来测试这个想法:

def neworder(shlist, tpos = 3):
    """Takes a list of ints, and inserts the last int, to tpos location (0-index)"""
    lst = []
    lpos = (len(shlist) - 1)
    print("Before:", [x for x in range(len(shlist))])
    # Just a counter
    for x in range(len(shlist)):
        if x > (tpos - 1) and x != tpos:
            lst.append(x-1)
        elif x == tpos:
            lst.append(lpos)
        else:
            lst.append(x)

    return lst

# Get the sheets in workbook
currentorder = wb.sheetnames
# move the last sheet to location `tpos`
myorder = neworder(currentorder)

>>>Before: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
>>>After : [0, 1, 2, 17, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]

# get each object instance from  wb._sheets, and replace
wb._sheets = [wb._sheets[i] for i in myorder]

一旦我意识到它的作用,第一个答案就不难在 openpyxl 文档中找到。只是有点惊讶更多的博客没有提到移动床单。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 openpyxl 或 xl* 或 xlsxwriter 在工作簿中移动工作表? 的相关文章

随机推荐

  • REBOL3 - 不同分支之间有什么区别?

    不同的 Rebol 3 分支之间有什么区别 特别是新的 REN 分支 是它们运行的 平台 功能集 代码组织 C 标准合规性吗 这是一个注定会过时的答案 因此设置为社区维基 此信息截至Sep 2015 因此 如果在一段时间后更新此答案 请也修
  • 查看已删除的控制台输出

    我正在运行多个 Junit 测试 在控制台中运行测试结果被清除并填充当前测试的日志 包含先前测试日志的日志文件将存储在哪里 eclipse中有什么方法可以让我看到这样删除的日志 请尝试以下操作 打开您的运行配置 选择选项卡Common In
  • 当 Eclipse CDT 索引器卡住时我该怎么办?

    我正在使用 Eclipse CDT 2020 06 但我在早期版本中也发生过这种情况 有时 Eclipse CDT 在解析某些文件时会卡住 百分比指标不前进 并按任务的取消按钮使其 取消请求 但它仍然卡在这种状态 因此 我不仅不能在我的项目
  • 确定源代码行和函数引用文件 - Firebug 如何做到这一点?

    简单的介绍 我试图获取函数定义的行号 以仅解析公共内容的文档注释 我已经到了可以找到函数名称的地步 如果我愿意的话 我可以执行该函数 但我似乎无法找到任何方法来提取行号信息 注意 这纯粹是出于文档目的 因此不需要跨浏览器 我知道 fireb
  • MS SQL 2012:在 SQL 中,如果列包含 0,则将列移至左侧

    如果第一列 左侧列 具有 0 值并且应在右侧列中添加 NULL 我需要将数据 列 移至左侧 一旦在任何列中发现非零值 则后面列中的 0 值应保持原样 输入数据 cust id month1 month2 month3 month4 mont
  • 如何使用 Jackson 将地图序列化为列表

    如何将 Map 属性序列化为 Map 值的列表 我已经能够使用进行其他简单的转换 JsonSerialize using getter 上的注释 然而 我不确定是否存在适合我想做的事情的人 我们需要类似的东西 在我们的例子中我们使用了定制的
  • MongoDB:按现有字段排序,然后按字母顺序排序

    在我的数据库中 我有一个字段name 在某些记录中 它是一个空字符串 而在其他记录中 它包含一个名称 在我的查询中 我目前正在做 db users find sort name 1 但是 这首先返回名称字段为空的结果 然后按字母顺序返回结果
  • 在哪里可以找到将正则表达式应用于输出的 Java Servlet 过滤器? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我希望有人已经写过这个 一
  • 在 VS 2010 中禁用 VB.NET 10 功能

    有没有办法在 VS 2010 中禁用 Visual Basic 10 语言功能 我们的开发团队已转移到 Visual Studio 2010 但我们仍然必须保持与 Visual Studio 2008 的向后兼容性 有没有办法禁用新的语言功
  • ActiveRecord::AssociationTypeMismatch:用户预期,得到 Fixnum

    我不明白为什么会出现以下错误 ActiveRecord AssociationTypeMismatch User 29943560 expected got Fixnum 当我在 Rails 控制台中执行此操作时 game Game cre
  • UTF-8 特殊字符不显示

    我试图找出为什么像这样的字符 显示像空盒子 它们是 unicode 字符 字符集是 utf 8 这可能是一个没有字形的字体问题吗 有任何想法吗 详细信息 Html页面 我使用firefox 16 0 1 Windows 7 像这篇文章中的页
  • 如何在Visual Studio中编译C++文件?

    我是 Visual Studio 新手 不知道如何编译 cpp 文件 我只制作了一个 cpp 文件 ctr n gt Visual C gt C 文件 并尝试编译它 但是在通常有编译按钮的地方 比如 c 有一个奇怪的 附加 按钮 我不明白发
  • Angular-app、(ui-)router 中解析器的身份验证和顺序

    这个问题指的是角度应用程序项目及其对用户进行身份验证的方式 原始实现通过在路由器上使用解析子句来保护对某些 url 的访问 这看起来像 routeProvider when projects templateUrl projects pro
  • VBA:将文本转换为数字

    我有一列数字 无论出于何种原因 它们都被格式化为文本 这使我无法使用算术函数 例如小计函数 将这些 文本数字 转换为真实数字的最佳方法是什么 Here is a screenshot of the specific issue 我已经尝试过
  • 从加载Picasso的ImageView获取Bitmap

    我有一个加载图像的方法 如果图像之前尚未加载 它将在服务器上查找它 然后它将其存储在应用程序文件系统中 如果它位于文件系统中 则会加载该图像 因为这比从服务器提取图像要快得多 如果您之前加载过图像而没有关闭应用程序 它将存储在静态字典中 以
  • VC++ 中 invalidate、update 方法的作用是什么

    我对 C 中的窗口函数有一点疑问 到底是什么 invalidate 功能做什么 当我们需要调用它时 它会发送什么消息 还有什么是 update 功能 是 invalidaterect 作品类似于 invalidate 功能 Thanks C
  • 如何获取某个目录的父文件夹的路径?

    当我有这个目录路径时 C Program Files x86 Embarcadero 我正在寻找的函数应该返回 C Program Files x86 我已经尝试过这段代码 但它仅适用于文件 不适用于目录 function GetParen
  • 使用 Beautiful Soup 从“img”标签中提取“src”属性

    考虑 div class someClass a href href img alt some src some a div 我想提取来源 即src 来自图像的属性 即img 使用 Beautiful Soup 标签 我使用 Beautif
  • 如何使用 Python csv reader 循环遍历特定范围的行?

    如何使用 Python csv reader 循环遍历特定范围的行 以下代码循环遍历所有行 with open trainFile rt as csvfile spamreader csv reader csvfile delimiter
  • 使用 openpyxl 或 xl* 或 xlsxwriter 在工作簿中移动工作表?

    我已经阅读了文档 openpyxl xlwt xlrd xlutils XLSX作家 我找不到移动工作表的方法Excel工作簿 测试在末尾添加了一个工作表 具体来说 我有一个日历之类的 JAN FEB DEC 当需要时我需要更换几个月 如果