【问题标题】:Xlwings - adding columnsXlwings - 添加列
【发布时间】:2015-04-01 15:56:46
【问题描述】:

我正在使用 xlwings 并尝试对两个单元格 A1 + B1 求和,并将输出输入到第三个单元格 C1 中。我想对范围 (A1->A9) + (B1->B9) 执行此操作,并将它们写入单元格 (C1->C9)。我当前的命令是 Range('C3').value = [sum(x) for x in zip(Range('A3:A9').value, Range('B3:B9').value)] 这将值相加正确,但答案水平写入单元格 C3-I3。我知道命令 Range('A1').value = [[1],[2],[3],[4],[5]] 会垂直列出列表的元素,但我不知道如何将其合并到我的命令中。

任何帮助将不胜感激

【问题讨论】:

    标签: excel python-3.x xlwings


    【解决方案1】:

    开放issue 让这更容易。对于简单列表,您可以执行以下操作(请注意,在 Python 2 上,您不需要 list 围绕 zip

    Range('C3').value = list(zip([sum(x) for x in zip(Range('A3:A9').value,
                                  Range('B3:B9').value)]))
    

    如果你安装了numpy,同样可以这样实现:

    import numpy as np
    Range('C3').value = (Range('A3:A9', asarray=True).value + 
                         Range('B3:B9', asarray=True).value)[:,np.newaxis]
    

    【讨论】:

      【解决方案2】:

      试试这个代码:

      import xlwings as xw
      sht = xw.Book().sheets[0]
      sht.range('C3').options(transpose=True).value \
      =[sum(x) for x in zip(sht.range('A3:A9').value, sht.range('B3:B9').value)]
      

      【讨论】:

        【解决方案3】:

        要使值在 Excel 中垂直打印出来,您只需将它们隐藏在列表中,最终得到列表列表,正如您所描述的那样。

        from xlwings import Workbook, Range
        wb = Workbook('example.xlsx')
        a_col = Range('A1').vertical.value # or Range('A1:A9').value if you wish
        b_col = Range('B1').vertical.value
        c_col = zip(a_col, b_col)
        c_col = [[sum(x)] for x in c_col]  # use '[]' here inside of list constructor
        Range('C1').value = c_col
        wb.close()
        

        【讨论】:

          猜你喜欢
          • 2023-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-24
          • 2015-03-19
          • 2020-11-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多