You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 07:25:22