【问题标题】:Data validation using openpyxl isnt writing to file - code enclosed使用 openpyxl 的数据验证不写入文件 - 附上代码
【发布时间】:2017-02-17 15:51:14
【问题描述】:

实际编写每个文件的代码运行良好。我遇到的问题是数据验证部分似乎没有做任何事情。在我引用的范围内没有创建下拉菜单。

提前感谢您的所有帮助!

%%time

import pandas as pd
import xlsxwriter as ew
import csv as csv
import os
import glob
import openpyxl

#remove existing files from directory
files = glob.glob(#filename)
for f in files:
    os.remove(f)

pendpath = #filename
df = pd.read_sas(pendpath)

allusers = df.UserID_NB.unique()
listuserpath = #filename
listusers = pd.read_csv(listuserpath)

listusers = listusers['USER_ID'].apply(lambda x: str(x).strip())

for id in listusers:
    x = df.loc[df['UserID_NB']==id]
    path = #filename
    x.to_excel(path, sheet_name = str(id), index = False)

    from openpyxl import load_workbook

    wb = openpyxl.load_workbook(filename = path)
    sheet = wb.get_sheet_by_name(str(id))
    maxrow = sheet.max_row    

    from openpyxl.worksheet.datavalidation import DataValidation

    dv = DataValidation(type="list", formula1='"Yes,No"', allow_blank=False, showDropDown = True)
    rangevar = 'R1:T'+ str(maxrow)
    dv.ranges.append(rangevar)
    wb.save(path)
    print str(id), rangevar

基本工作表代码

 import openpyxl 

 wb = openpyxl.Workbook()
 ws = wb.active
 sheet.title = 'testsheet'

path = '#filepath'
from openpyxl.worksheet.datavalidation import DataValidation

dv = DataValidation(type="list", formula1='"Yes,No"', allow_blank=False, showDropDown = True)
dv.ranges.append('A1')
wb.save(path)

【问题讨论】:

  • 请问您为什么要在循环中导入?
  • 看起来您可能会反复覆盖同一个文件。我建议你用一个简单的 Excel 文件试试相关代码。
  • Dmitry - 我正在为 csv 文件中的每个用户 id 创建单独的 excel 文件(通常我会让它遍历所有唯一的用户 id,但这个请求是针对一部分用户的)。遍历列表似乎是最有效的方法
  • Charlie - 我添加了“基本工作表代码”以尝试您的建议。结果相同 - 创建了工作簿和工作表,但工作表中没有验证。

标签: python validation openpyxl


【解决方案1】:

您缺少将dv 添加到worksheet

>>> # Add the data-validation object to the worksheet
>>> ws.add_data_validation(dv)

Read the docs about validation

【讨论】:

  • 很好,很有效。出于某种原因,它没有显示下拉菜单,但验证部分正在工作。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多