openpyxl:ValueError:在关闭的文件上的I / O操作

时间:2019-02-23 23:14:26

标签: python

我使用此代码将图像 logo.png 放在单元格A1中的 logo.xlsx 中:

login().andThen(DatabaseController.fetchDBRecord())
    .flattenAsObservable(dbRecord -> dbRecord)
    .flatMapCompletable(database -> transformDatabase(database, DB_RECORD_MAPPER)
            .flatMap(NetworkController::UpdateCall)
            .flatMapCompletable(response -> {
                if (isSuccess(response))
                    return DatabaseController.updateDBRecord(database);
                else
                    return Completable.complete()
            });

现在我正在尝试使用 load_workbook 并使用以下代码将文件作为现有工作簿读取:

    <section id="products-section">
            <div class="container">
                <div class="row">
                    <div class ="col-lg-1"> </div>
                    <div class ="col-lg-10 border-break-full"> 
                        <div class="row">
                            <div class="col-lg-4 border-red">
                                <img class="img-responsive float-right border-red" src="img/test-product.JPG" alt="">
                            </div>
                            <div class="col-lg-8">
                            </div>
                        </div>
                    </div>
                    <div class ="col-lg-1"> </div>
                </div>
            </div>
    </section>

但是我遇到以下错误:

from openpyxl import Workbook
from openpyxl.drawing.image import Image
wb = Workbook()
ws = wb.active
img = Image('logo.png')
ws.add_image(img, 'A1')
wb.save('logo.xlsx')

P.S:我尝试对没有图像的文件执行相同的操作。一切正常。

2 个答案:

答案 0 :(得分:0)

我正在使用openpyxl版本2.5.14。降级到2.5.11修复了它。更多信息here

答案 1 :(得分:0)

在通过搜索修复程序浪费时间之后,这是我的解决方案: 我在openpyxl 2.5.14中遇到了同样的问题,但是在2.5.11上降级根本解决不了问题,请改用2.5.12。

https://bitbucket.org/openpyxl/openpyxl/issues/1133/writing-xlsx-image-is-not-inserted-and

如果使用2.5.11,则Excel文件中可能不会显示新图像。 如果文件中已经有图像要编辑,则这是一个已知问题。

最佳实践: 如果您的其余代码与openpyxl 2.6.2或2.6.1一起运行,请使用以下版本之一,则此问题可通过库更新来解决!

https://openpyxl.readthedocs.io/en/stable/changes.html 已在版本2.6.0问题#1170中修复 但是2.6.0还有很多其他错误,因此请使用其他版本;-)