我有一个使用 DELIMITER //
CREATE PROCEDURE Adda(
Name varCHAR(45),Surrname varCHAR(45),City varCHAR(45),PhoneNumber varCHAR(45),photo varCHAR(45))
BEGIN
START TRANSACTION;
INSERT INTO Personal(Name,Surrname)
VALUES(Name,Surrname);
INSERT INTO Addres(Id_Personal_Address,Country, City)
VALUES(LAST_INSERT_ID(),Country,City);
--i think here i should assign LAST_INSER_ID to variable
INSERT INTO Images(Id_Personal_Address,photo)
VALUES(Photo); -- and here use it
COMMIT;
END//
DELIMITER ;
写入电子表格的程序。执行程序后,单元格按预期填充,但电子表格会损坏。 Excel修复电子表格,然后我可以再次查看它。
openpyxl
我尝试使用Microsoft的Open XML SDK Productivity Tool将好的和坏的文件相互比较,并注意到import openpyxl
from openpyxl import load_workbook
amounts, row = [1, 2, 3, 4, 5], 2
book = load_workbook("output.xlsx")
sheet = book.active
for i, value in enumerate(amounts):
sheet.cell(column=i+1, row=row, value=value)
print ("Sheet updating complete.")
book.save("output.xlsx")
丢失了。我尝试使用我从另一个问题中获得的以下源代码复制它,但它并没有为我解决问题。
styles.xml
我可以从Excel生成的修复日志中确认问题出在import zipfile
with zipfile.ZipFile('outputcopy.xlsx', 'r') as zgood:
styles_xml = zgood.read('xl/styles.xml')
with zipfile.ZipFile('output.xlsx', 'a') as zbad:
zbad.writestr('xl/styles.xml', styles_xml)
。我需要将这个xml文件从好副本复制到坏副本。
如何复制xl/styles.xml
文件,以便程序可以在不损坏xl/styles.xml
的情况下运行?
我已经再次尝试解决此问题。在output.xlsx
无法从其他Excel文件中复制的情况下;我在styles.xml
之前从styles.xml
开了output.xlsx
。保存之后,我从save语句之前获取book.save("output.xlsx")
并写入它。不幸的是,这没有改变任何东西,我仍然得到一个损坏的Excel文件。通过此尝试,我的测试代码如下所示:
styles.xml
我尝试将其另存为全新的Excel文件,但仍然遇到同样的问题。我尝试使用import openpyxl
import zipfile
from openpyxl import load_workbook
amounts, indexValue, row = [1, 2, 3, 4, 5], 0, 2
book = load_workbook("output.xlsx")
sheet = book.active
for i, value in enumerate(amounts):
sheet.cell(column=i+1, row=row, value=value)
print ("Sheet updating complete.")
with zipfile.ZipFile('output.xlsx', 'r') as zgood:
styles_xml = zgood.read('xl/styles.xml')
book.save("output.xlsx")
with zipfile.ZipFile('output.xlsx', 'a') as zbad:
zbad.writestr('xl/styles.xml', styles_xml)
从zip file
打开并写入新保存的文件,但仍然没有结果。
output.xlsx
虽然我已经解决了这个问题,但值得注意的是,加载工作簿时似乎只会出现此问题。我用电子表格创建了另一个程序来创建工作簿,而不是加载它。因此,电子表格不会保存损坏。
答案 0 :(得分:4)
在确认问题出现在styles.xml
后,我发现问题很可能与写入单元格的样式格式有关。通过使用styles
模块中的openpyxl
,我已解决了此问题。
我在这种情况下声明了一个变量fontStyle
,并设置了所有的样式设置:
fontStyle = Font(name="Calibri", size=12, color=colors.BLACK)
在为每个单元格写amounts
时,我还使用fontStyle
设置了这些单元格的样式:
sheet[cell].font = fontStyle
完成的代码如下所示:
import openpyxl
from openpyxl import load_workbook
from openpyxl.styles import colors
from openpyxl.styles import Font, Color
fontStyle = Font(name="Calibri", size=12, color=colors.BLACK)
amounts, indexValue, cell = [1, 2, 3, 4, 5], 0, "A2"
book = load_workbook("output.xlsx")
sheet = book.active
while indexValue != 5:
sheet[cell] = amounts[indexValue]
sheet[cell].font = fontStyle
indexValue += 1
cell = chr(ord(cell[0]) + 1) + str(cell[1])
print ("Sheet updating complete.")
book.save("output.xlsx")
我相信这是有效的,因为写入方法没有默认样式设置。这可以解释为什么在使用Open XML SDK Productivity Tool时缺少styles.xml
。在修复后再次检查此Excel文件时,我可以确认styles.xml
不再丢失。
文件在保存后不再损坏,可以再次正常打开。此外,我现在能够执行此脚本再次写入Excel文件,而无需打开和关闭以修复它。
请注意,我还从原始循环中更改了循环 - 这是我尝试修复此问题的一部分。这对最终结果没有影响 - 这完全取决于所写单元格的样式。
这并没有完全回答用zipfile
专门解决问题的问题,但确实解决了这个问题。