如何用Python脚本向电子表格追加数据并保护数据不被他人篡改
解决方案
一、Excel文件防篡改方案
1. 用openpyxl设置工作表保护
openpyxl其实支持工作表保护,你可以让表格仅允许程序写入,用户打开后只能查看无法编辑。核心思路是写入时临时解除保护,写完重新上锁:
from openpyxl import load_workbook from openpyxl.worksheet.protection import SheetProtection def append_sensor_data(file_path, data): wb = load_workbook(file_path) ws = wb.active # 临时解除保护(如果之前已设置) ws.protection.disable() # 追加传感器数据 ws.append(data) # 重新设置保护:允许选中单元格,但禁止编辑,可选加密码防止手动解锁 ws.protection = SheetProtection( sheet=True, selectLockedCells=True, selectUnlockedCells=True, password="your_secure_pass" # 可选,不想加可以删掉这行 ) wb.save(file_path) wb.close()
用户打开表格后,只能查看内容,无法修改;程序写入时会自动解锁再上锁,不影响数据追加。
2. 设置Excel只读推荐属性
给文件设置「只读推荐」,用户打开时会默认提示以只读模式打开,大幅降低误编辑概率。可以用win32com(Windows环境)一次性设置:
import win32com.client as win32 def set_readonly_mode(file_path): excel = win32.gencache.EnsureDispatch('Excel.Application') wb = excel.Workbooks.Open(file_path) wb.ReadOnlyRecommended = True wb.Save() wb.Close() excel.Quit()
第一次运行这个函数设置属性后,后续用openpyxl追加数据时,该属性会自动保留。
二、替代方案:改用数据库(更可靠)
如果Excel的保护机制不够稳定,数据库是更优选择,推荐用SQLite——轻量级、无需额外服务,Python原生支持,完全避免人工篡改问题。
SQLite示例代码
import sqlite3 # 初始化数据库(仅第一次运行) def init_sensor_db(db_path): conn = sqlite3.connect(db_path) cursor = conn.cursor() # 创建传感器数据表,自动记录时间戳 cursor.execute(''' CREATE TABLE IF NOT EXISTS sensor_records ( id INTEGER PRIMARY KEY AUTOINCREMENT, record_time DATETIME DEFAULT CURRENT_TIMESTAMP, sensor_value REAL NOT NULL ) ''') conn.commit() conn.close() # 追加传感器数据 def add_sensor_data(db_path, value): conn = sqlite3.connect(db_path) cursor = conn.cursor() cursor.execute('INSERT INTO sensor_records (sensor_value) VALUES (?)', (value,)) conn.commit() conn.close() # 可选:查询最新10条数据验证 def get_latest_data(db_path): conn = sqlite3.connect(db_path) cursor = conn.cursor() cursor.execute('SELECT * FROM sensor_records ORDER BY record_time DESC LIMIT 10') return cursor.fetchall()
SQLite文件默认只有所有者有读写权限,其他人只能查看(需用SQLite浏览器),完全杜绝误编辑,而且数据查询、统计比Excel高效得多,适合长期存储传感器数据。
三、操作系统层面权限控制
不管用Excel还是数据库文件,都可以通过系统权限加固:
- Windows:右键文件→属性→安全,设置只有程序运行的用户有写入权限,其他用户仅只读;
- Linux/macOS:用
chmod 644 sensor_data.db命令,让文件所有者可读写,其他人仅只读。
内容的提问来源于stack exchange,提问作者ataveras64
相关产品推荐
相关产品推荐

