- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简而言之:如何将 Google Sheets 电子表格导出到 SQLite 数据库而不丢失单元格锚定图像?
长话短说: Google Sheets、Excel 和 SQLite 都允许使用单元格锚定图像。此外,Sheets 支持导出到 Excel,而不会丢失此类图像;以及配套程序,例如“DB Browser for SQLite”, LibreOffice 还支持单元格锚定图像。但是,我无法导出工作表(或 Excel 电子表格) 到 SQLite,尽管我已经尝试了所有明显的可能性,以及一些不太明显的可能性。在后者中 类别中,有两次尝试值得注意:
a) Python 包 openpyxl 明确表示 “不会复制所有其他工作簿/工作表属性 - 例如图像、图表。”
b) 由于 read_excel
的 dtype
参数,Python 的 pandas
更有前途。据说, 将其指定为 object
应该允许保留对象,例如细胞锚定图像。
这是我使用 pandas 来实现所需结果的(失败的)尝试之一:
import sqlite3
import pandas as pd
filename="Test"
con=sqlite3.connect(filename+".db")
wb = pd.read_excel('Test.xlsx',sheet_name = None, header = None, dtype = object)
for sheet in wb:
print(sheet) # Sheet1
# print( wb[sheet].columns )
wb[sheet].to_sql(sheet, con, index=False)
con.commit()
con.close()
任何解决方案,无论是否基于 Python,都会很乐意接受。
我知道有几种将所有图像提取到单独文件中的技术,但我正在寻找一种完全自动化的技术(大概是某种脚本)来执行转换。这种技术是否提取图像作为中间步骤并不重要。
我还尝试在对 to_sql
的调用中添加 dtype
规范,但无济于事。
@Stef 的原始程序要求要复制的图像全部位于命名列中,并且这些名称要么是已知的,要么是可以确定的。第一个假设是可以接受的,第二个假设可以通过简单地编写来放宽:
dtype = object
在对 read_excel
的调用中。
最佳答案
没有直接的方法,但可以使用openpyxl
version 2.5.5或稍后读取图像并手动将它们放入数据框中。
在下面的最小示例中,我使用 pandas read_excel
首先获取除图像之外的所有数据。关键点是将图像列导入为 object
类型,以便以后能够分配图像。否则,此空列将获取所有 NaN
和 float 据类型。
然后我们使用 openpyxl
从 Excel 读取图像并将其导入到数据框中。图像的 ref 属性保存一个 _io.BytesIO 流。加载工作簿后,它的指针指向末尾 (EOF),因此我们必须先倒回它 (img.ref.seek(0)
)。 (顺便说一句,openpyxl
中的 img.path
名称似乎有一个错误:我得到相同的路径 /xl/media/image1.png
对于所有三个图像来说是 image{1,2,3}.png
在 xlsx 中)。
anchor 行/列值从零开始 (img.anchor.idx_base == 0
),因此我们在计算数据帧中的 iat
位置时必须考虑标题行(以及可能的索引列,如果有的话)。最后,我们使用 to_sql
将数据帧导出到 SQL。
import pandas as pd
import openpyxl
import sqlite3
file_name = 'so58068593.xlsx'
sheet_name = 'Tabelle1'
# read data into dataframe
df = pd.read_excel(file_name, sheet_name=sheet_name, dtype=object)
# read images and add them to dataframe
wb = openpyxl.load_workbook(file_name)
ws = wb[sheet_name]
for img in ws._images:
img.ref.seek(0)
df.iat[img.anchor.to.row-1, img.anchor.to.col] = img.ref.read()
# export to sqlite
with sqlite3.connect(file_name + ".db") as con:
df.to_sql(sheet_name, con=con)
Excel file (图片取自Wikipedia):
在 SQLite 的数据库浏览器中查看 SQLite 数据库:
这只是一个最小的例子。如果您事先不知道图像在 xlsx
文件中的位置,您可以首先迭代工作表的 images
集合并检查您需要哪些列/行对于数据框中的图像,然后将它们附加到数据框(如果尚未存在),然后才分配图像。但请注意,在 xlsx
中,您可以在单元格中包含数据,同时将图像锚定到该单元格,这当然不能映射到数据库表或 pandas 数据框。原因是图像不是单元格的内容,而只是锚定到该单元格(您甚至可以将多个图像锚定到同一个单元格)。
关于excel - 将带有单元格锚定图像的电子表格导入 SQLite 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58068593/
我正在尝试学习 Knockout 并尝试创建一个照片 uploader 。我已成功将一些图像存储在数组中。现在我想回帖。在我的 knockout 码(Javascript)中,我这样做: 我在 Jav
我正在使用 php 编写脚本。我的典型问题是如何在 mysql 中添加一个有很多替代文本和图像的问题。想象一下有机化学中具有苯结构的描述。 最有效的方法是什么?据我所知,如果我有一个图像,我可以在数据
我在两个图像之间有一个按钮,我想将按钮居中到图像高度。有人可以帮帮我吗? Entrar
下面的代码示例可以在这里查看 - http://dev.touch-akl.com/celebtrations/ 我一直在尝试做的是在 Canvas 上绘制 2 个图像(发光,然后耀斑。这些图像的链接
请检查此https://jsfiddle.net/rhbwpn19/4/ 图像预览对于第一篇帖子工作正常,但对于其他帖子则不然。 我应该在这里改变什么? function readURL(input)
我对 Canvas 有疑问。我可以用单个图像绘制 Canvas ,但我不能用单独的图像绘制每个 Canvas 。- 如果数据只有一个图像,它工作正常,但数据有多个图像,它不工作你能帮帮我吗? va
我的问题很简单。如何获取 UIImage 的扩展类型?我只能将图像作为 UIImage 而不是它的名称。图像可以是静态的,也可以从手机图库甚至文件路径中获取。如果有人可以为此提供一点帮助,将不胜感激。
我有一个包含 67 个独立路径的 SVG 图像。 是否有任何库/教程可以为每个路径创建单独的光栅图像(例如 PNG),并可能根据路径 ID 命名它们? 最佳答案 谢谢大家。我最终使用了两个答案的组合。
我想将鼠标悬停在一张图片(音乐专辑)上,然后播放一张唱片,所以我希望它向右移动并旋转一点,当它悬停时我希望它恢复正常动画片。它已经可以向右移动,但我无法让它随之旋转。我喜欢让它尽可能简单,因为我不是编
Retina iOS 设备不显示@2X 图像,它显示 1X 图像。 我正在使用 Xcode 4.2.1 Build 4D502,该应用程序的目标是 iOS 5。 我创建了一个测试应用(主/细节)并添加
我正在尝试从头开始以 Angular 实现图像 slider ,并尝试复制 w3school基于图像 slider 。 下面我尝试用 Angular 实现,谁能指导我如何使用 Angular 实现?
我正在尝试获取图像的图像数据,其中 w= 图像宽度,h = 图像高度 for (int i = x; i imageData[pos]>0) //Taking data (here is the pr
我的网页最初通过在 javascript 中动态创建图像填充了大约 1000 个缩略图。由于权限问题,我迁移到 suPHP。现在不用标准 标签本身 我正在通过这个 php 脚本进行检索 $file
我正在尝试将 python opencv 图像转换为 QPixmap。 我按照指示显示Page Link我的代码附在下面 img = cv2.imread('test.png')[:,:,::1]/2
我试图在这个 Repository 中找出语义分割数据集的 NYU-v2 . 我很难理解图像标签是如何存储的。 例如,给定以下图像: 对应的标签图片为: 现在,如果我在 OpenCV 中打开标签图像,
import java.util.Random; class svg{ public static void main(String[] args){ String f="\"
我有一张 8x8 的图片。 (位图 - 可以更改) 我想做的是能够绘制一个形状,给定一个 Path 和 Paint 对象到我的 SurfaceView 上。 目前我所能做的就是用纯色填充形状。我怎样才
要在页面上显示图像,你需要使用源属性(src)。src 指 source 。源属性的值是图像的 URL 地址。 定义图像的语法是: 在浏览器无法载入图像时,替换文本属性告诉读者她们失去的信息。此
**MMEditing是基于PyTorch的图像&视频编辑开源工具箱,支持图像和视频超分辨率(super-resolution)、图像修复(inpainting)、图像抠图(matting)、
我正在尝试通过资源文件将图像插入到我的程序中,如下所示: green.png other files 当我尝试使用 QImage 或 QPixm
我是一名优秀的程序员,十分优秀!