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

如何实现点击Excel指定单元格时记录秤的实时数据?

Python实现点击Excel特定单元格记录秤实时数据

核心方案

通过串口读取秤的实时数据,结合Windows COM接口监听Excel单元格选中事件,当点击指定单元格时触发数据写入操作。这个方案适配大多数串口秤,且无需额外Excel插件。

依赖安装

先安装所需Python库:

pip install pyserial pywin32

代码实现

1. 读取秤的串口数据

import serial
import time

def read_scale_data(port='COM3', baudrate=9600):
    """读取秤的实时重量数据,返回浮点型数值"""
    try:
        # 初始化串口(参数需匹配秤的配置)
        ser = serial.Serial(port, baudrate, timeout=1)
        time.sleep(2)  # 等待串口握手完成
        
        while True:
            if ser.in_waiting > 0:
                # 读取并解码串口数据
                raw_data = ser.readline().decode('utf-8').strip()
                # 过滤有效数据(假设秤返回纯数字/带小数点的重量)
                if raw_data.replace('.', '').isdigit():
                    return float(raw_data)
            time.sleep(0.1)
    except Exception as e:
        print(f"秤数据读取失败: {str(e)}")
        return None

2. 监听Excel单元格点击并记录数据

import win32com.client as win32
import pythoncom

class ExcelCellListener:
    """监听Excel工作表的单元格选中事件"""
    def OnSelectionChange(self, target_range):
        # 检查是否选中了目标单元格(示例为Sheet1的A1单元格)
        if target_range.Address == "$A$1":
            weight = read_scale_data()
            if weight is not None:
                ws = win32.GetActiveObject("Excel.Application").ActiveSheet
                # 找到B列的下一个空行
                next_empty_row = ws.Cells(ws.Rows.Count, "B").End(-4162).Row + 1  # xlUp常量值为-4162
                # 写入重量和时间戳
                ws.Cells(next_empty_row, "B").Value = weight
                ws.Cells(next_empty_row, "C").Value = win32.Dispatch("DateTime").Now()
                print(f"已记录: {weight}kg | {ws.Cells(next_empty_row, 'C').Value}")

if __name__ == "__main__":
    pythoncom.CoInitialize()
    
    # 连接到Excel实例(优先使用已打开的,否则新建)
    try:
        excel_app = win32.GetActiveObject("Excel.Application")
    except:
        excel_app = win32.Dispatch("Excel.Application")
        excel_app.Visible = True
        excel_app.Workbooks.Add()
    
    # 绑定事件到当前活动工作表
    win32.WithEvents(excel_app.ActiveSheet, ExcelCellListener)
    
    # 保持程序运行以监听事件
    print("监听启动:点击A1单元格记录秤数据...")
    while True:
        pythoncom.PumpWaitingMessages()
        time.sleep(0.1)

关键配置说明

  • 串口参数:修改read_scale_data中的port和baudrate,确保与秤的串口设置一致(可通过秤的说明书或串口调试工具确认)
  • 目标单元格:修改target_range.Address的值,比如要监听C5单元格就改为"$C$5"
  • 数据写入位置:调整ws.Cells(next_empty_row, "B")中的列标识(如"B"改为"D")来改变数据存储列

备选方案(VBA)

如果不想用Python,也可以直接在Excel中写VBA代码:

  1. 打开Excel按Alt+F11进入VBA编辑器
  2. 在目标工作表的代码窗口中添加以下代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        ' 这里调用串口读取函数(需借助VBA串口控件或API)
        ' 示例:假设已通过VBA获取到重量值weight
        Dim nextRow As Long
        nextRow = Me.Cells(Me.Rows.Count, "B").End(xlUp).Row + 1
        Me.Cells(nextRow, "B").Value = weight
        Me.Cells(nextRow, "C").Value = Now()
    End If
End Sub

注:VBA读取串口需要额外配置MSComm控件或调用Windows API,复杂度略高。

内容的提问来源于stack exchange,提问作者Kojo Olivet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 17:50:54