利用xlwings把DataFrame数据正文写入DGS加密的且已有复杂内容的Excel模板中(去掉DataFrame的列和索引内容,只写入正文数据)

目录

1、背景描述:

2、问题描述:

3、解决方案:

方法一:通过xlwings的设置,去掉DataFrame的列和索引

方法二:通过把DataFrame数据变为NumPy数组

4、整体回顾:

1、模板文件:

 2、数据文件:

 3、数据文件:

 4、主要代码:


1、背景描述:

基本需求,当前有一个复杂的Excel模板,需要把经过Python处理后的数据写入Excel模板文件。

1、为什么不直接全部通过Python完成全部数据,直接输出?

Excel模板比较复杂,其中很多格式设定,很难直接通过python直接还原;

例如,下面这种表头的模板,里面设定了一些内容,不太方便通过python直接生成,生成的数据直接写到下面。

 

2、为什么选择xlwings库处理Excel?

Excel数据模板是经过DGS终端进行加密的,目前测试好像只有使用win32com和xlwings这两个库才可以读取和写入,其他库好像不行;(至于为什么要用DGS进行加密……这个一言难尽……)

3、为了简化说明,让大家能够更清晰的理解这个事情,下面是用的数据和模板只是简单的代用数据,实际处理的数据和模板复杂程度远超样例;

2、问题描述:

根据xlwings的使用方法,将DataFrame数据写入excel是很简单的事情,基本是以下这种方式的几行代码:

import pandas as pd
df = pd.DataFrame([[1,2], [3,4]], columns=['a', 'b'])
sheet.range('A1').value = df

此时的df是最简单的一个举例,显示的如下的效果

实际写入到excel文件后的效果是这样的:

 刚才说了,实际数据是要写入到一个excel的模板中,在这个模板中已经有列名称和索引的序号内容,不要再次写入这部分内容。

 

3、解决方案:

为了在写入数据的时候不附带写入列和索引,尝试过几种方法,比如切片,重置索引等……

当然,也可能是还有更好的方法,只是还不知道……也尝试去百度查找解决方案,但是好像类似的需要不多,没看见有现成的解决方案,于是只能到官方文档里面去找:

方法一:通过xlwings的设置,去掉DataFrame的列和索引

sheet.range('A1').options(index=False, header=False).value = df
# 其中,index=False, 代表去掉索引数据;
# header=False, 代表去掉列明

# 其中,index=False, 代表去掉索引数据;# header=False, 代表去掉列明

方法二:通过把DataFrame数据变为NumPy数组

sheet.range('A1').value = df.to_numpy()
# 通过to_numpy()把DataFrame的正文数据变为numpy数组

通过to_numpy()把DataFrame的正文数据变为numpy数组,不包含列明和索引的数据。

以下是官方文档中的说明信息:

pandas.DataFrame.to_numpy
DataFrame.to_numpy(dtype=None, copy=False, na_value=_NoDefault.no_default)
Convert the DataFrame to a NumPy array.

By default, the dtype of the returned array will be the common NumPy dtype of all types in the DataFrame. For example, if the dtypes are float16 and float32, the results dtype will be float32. This may require copying data and coercing values, which may be expensive.

Parameters
dtypestr or numpy.dtype, optional
The dtype to pass to numpy.asarray().

copybool, default False
Whether to ensure that the returned value is not a view on another array. Note that copy=False does not ensure that to_numpy() is no-copy. Rather, copy=True ensure that a copy is made, even if not strictly necessary.

na_valueAny, optional
The value to use for missing values. The default value depends on dtype and the dtypes of the DataFrame columns.



Returns
numpy.ndarray

于是通过以上两种方法就基本达到了需求,能解决当前遇到的问题。

4、整体回顾:

1、模板文件:

模板excel文件格式为:

 2、数据文件:

处理好的数据文件 在DataFrame中为:

 3、数据文件:

把DataFrame数据,去掉列和索引后,写入excel模板中,最终文件为:

 4、主要代码:

# 模板文件所在地址
mb_path = f'files\模板文件.xlsx'

# 最终保存的文件地址
file_path = f'files\datatest_{today_time}.xlsx'

with xw.App(visible=True,add_book=False) as app:
    # 打开模板文件
    wb = app.books.open(mb_path)
    sht = wb.sheets[0]

    # 向表格的B10单元格写入数据,处理好的DataFrame数据
    sht.range('B10').value = df.to_numpy()
    # 此处可以进行切片处理,如果有必要 df.iloc[4:,1:]
        
    # 保存
    wb.save(file_path)

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 您好!要用xlwings写入DataFrame数据,可以使用xlwings的Range函数将DataFrame转换为Excel Range,然后将其写入Excel工作表。具体步骤如下: 1. 构建一个DataFrame数据,例如: ``` import pandas as pd data = {'Name': ['Tom', 'Jack', 'Steve', 'Ricky'], 'Age': [28, 34, 29, 42], 'Country': ['USA', 'France', 'China', 'Australia']} df = pd.DataFrame(data) ``` 2. 选择要写入数据Excel工作表,例如: ``` import xlwings as xw # 打开Excel文件 wb = xw.Book('文件路径/文件名.xlsx') # 选择要写入数据的工作表 sheet = wb.sheets['Sheet1'] ``` 3. 将DataFrame数据转换为Excel Range: ``` # 将DataFrame转换为Excel Range range_data = sheet.range('A1').options(index=False, header=True) range_data.value = df ``` 4. 关闭Excel文件: ``` wb.close() ``` 注意事项: - 在转换为Excel Range时,需指定DataFrame数据索引名,使用options函数的index和header参数; - 若要将DataFrame索引一并写入Excel工作表,则需将options函数的index参数设为True; - 写入数据后,应使用wb.close()函数关闭Excel文件。 希望能对您有所帮助! ### 回答2: xlwings是一款Python库,它为开发者提供了一种简单、灵活的方式来操作Excel。它可以帮助我们将Python数据导入Excel,并在Excel设置数据格式、绘制图表、计算公式等。数据写入和读取非常简单,而xlwings库内置的Objects类提供了一系方便的方法来操作Excel。 对于dataframe数据xlwings提供了两种主要的方法来写入Excel: 1. 直接将dataframe写入单元格:通过指定dataframe起始单元格,将整张表格复制到Excel的单元格。 ``` import pandas as pd import xlwings as xw app = xw.App(visible=True, add_book=False) df = pd.DataFrame({'Name': ['Tom', 'Jerry', 'Alex'], 'Age': [18, 22, 25]}) wb = xw.books.add() # 输出结果 >> Name Age 0 Tom 18 1 Jerry 22 2 Alex 25 sheet = wb.sheets.add('Test_Sheet') sheet.range('A1').options(index=False).value = df ``` 在这个方法,我们首先通过pandas创建了一个数据框df,然后通过xlwings打开了一个Excel文件,并在该文件创建了一个名为Test_Sheet的工作表。 在最后一行,我们有了一个非常重要的语句sheet.range('A1').options(index=False).value = df,它用来将dataframe数据复制到Excel的单元格。我们要注意两个点: - range('A1')指定了起始单元格的位置为A1,它会自动将整张表格细心到大于和等于数据帧的范围。 - 如果我们使用index=False选项,则可以避免生成Excel文件时创建行索引。 2. 逐行逐写入dataframe数据:通过逐行逐地将dataframe的每个元素写入Excel单元格。 ``` import pandas as pd import xlwings as xw app = xw.App(visible=True, add_book=False) df = pd.DataFrame({'Name': ['Tom', 'Jerry', 'Alex'], 'Age': [18, 22, 25]}) wb = xw.books.add() # 输出结果 >> Name Age 0 Tom 18 1 Jerry 22 2 Alex 25 sheet = wb.sheets.add('Test_Sheet') for i in range(df.shape[0]): sheet.range('A{}'.format(i+1)).value = df.loc[i:i].values.tolist()[0] ``` 在本方法,我们首先创建df数据框,并通过xlwings打开了一个Excel文件,并在该文件创建了一个名为Test_Sheet的工作表。 我们通过逐行写入df的元素,将整个df写入到工作表Test_Sheet。我们可以在最后一行看到,我们将df.loc [i:i]转换为表,然后使用tolist()函数将值转换为Python表。最后,我们使用.format()函数插入行号i,以从第一行开始写入数据。 总结: 可以看到,xlwings库为数据写入和读取提供了非常简单的方法,通过一个单元格或逐行逐的方法实现数据数据Excel的导入。 而且,xlwings库与pandasnumpy这些流行的Python库完美结合,为我们提供了一个强大的Python开发环境,可以轻松地将数据集成和操作Excel。 ### 回答3: xlwings是一款用于在PythonExcel之间进行交互的强大工具。使用xlwings可以方便地读取、写入以及修改Excel文件数据,同时还能够使用Python丰富的库进行数据分析、处理和可视化。 在xlwingsDataFrame是一种非常常用的数据类型,通常用于存储和处理表格数据DataFrame提供了非常丰富的方法和函数,可以对数据进行各种操作和处理。在xlwings,要想将DataFrame数据写入Excel文件,可以使用xlwings的“Range.value”属性和“Range.options()”方法。 从DataFrameExcel: 将DataFrame数据写入Excel文件,需要使用pandas的to_excel函数,同时需要用xlwings打开Excel文档进行操作。例如,假设我们有一个名为“data”的DataFrame对象,并且要将其写入名为“Sheet1”的Excel工作簿的区域“A1:D5”,可以按照以下步骤进行操作: ``` import xlwings as xw import pandas as pd #读取Excel文件 wb=xw.Book('file.xlsx') #定位到Sheet1工作表 sheet1=wb.sheets['Sheet1'] #读取data data=pd.read_excel('file.xlsx') #将data写入Excel文件 sheet1.range('A1').value=data ``` 在这个例子,我们首先使用Openpyxl打开了一个名为“file.xlsx”的Excel文件,并从读取了名为data的DataFrame对象。然后,我们使用Range.value属性将该DataFrame写入名为“Sheet1”的Excel工作表的区域“A1:D5”。 从ExcelDataFrame: 除了将DataFrame数据写入Excel文件之外,还可以使用xlwingsExcel文件读取数据,并将它们转换为DataFrame对象。为此,可以使用xlwings的Range.options()方法和pandas的read_excel()函数。例如,若我们要从一个名为“file.xlsx”的Excel文件读取“Sheet1”工作表上的数据,并将其转换为DataFrame对象,可以按照以下步骤进行操作: ``` import xlwings as xw import pandas as pd #读取Excel文件 wb=xw.Book('file.xlsx') #定位到Sheet1工作表 sheet1=wb.sheets['Sheet1'] #读取Excel数据并转换为DataFrame对象 data=sheet1.range('A1:D5').options(pd.DataFrame).value ``` 在这个例子,我们首先使用Openpyxl打开了一个名为“file.xlsx”的Excel文件,并定位到名为“Sheet1”的工作表。然后,我们使用Range.options()方法将该区域转换为DataFrame对象,并将其存储在名为“data”的变量。最后,我们使用pandas的read_excel()函数将该变量读取为DataFrame对象。 总之,使用xlwingsDataFrame数据写入Excel文件和从Excel文件读取DataFrame对象非常简单,只需使用一些简短的代码即可完成操作。所以,xlwings提供的这种交互方式使得我们能够更加方便地在PythonExcel之间进行数据处理和分析。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值