将输入文件从 Excel VBA 发送到 Raspberry Pi 而不更改内容

Sending an input file from Excel VBA to Raspberry Pi without change in content

我正在将一个文本文件从我的 Excel 发送到一个 Raspberry Pi,Pi 将在其中读取该文件并获取其中的输入。输入只是一行,它是一个简单的数字,没有别的(40,38 等)

当我 运行 这个宏时,我可以在我的电脑中完美地看到输入文件,但是当我在 Pi 中打开它时,它发生了变化,例如:

我电脑中的输入文件是:

65

Raspberry 中的输入文件是:

ÿþ6

我怎样才能确保这个号码按原样发送给 Pi。或者我如何将其解码为我的 python 脚本可以理解的内容。我不会在这个数字上使用小数,如果它作为字符串发送也没关系,因为我稍后可以在我的 python 代码中解析它。

下面是我的Excel宏

Sub Send()

    Dim sleeptime As String
    sleeptime = InputBox("Duration between each reading in seconds?")

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")

    Dim Fileout As Object
    Set Fileout = fso.CreateTextFile("C:\Users\xx\Desktop\VBA\input.txt", True, True)
    Fileout.Write sleeptime
    Fileout.Close
    Set fso = Nothing
    Set Fileout = Nothing


    Const cstrSftp As String = """C:\Program Files\PuTTY\pscp.exe"""
    Dim strCommand As String
    Dim pUser As String
    Dim pPass As String
    Dim pHost As String
    Dim pFile As String
    Dim pRemotePath As String

    pUser = "pi" '//user on remote system
    pPass = "xx" '//user's password on remote system
    pHost = "192.168.x.xx" '//ip address of remote system
    pFile = "C:\Users\xx\Desktop\VBA\input.txt" '//file to transfer
    pRemotePath = "/home/pi/Temp_Codes" '//directory where file will be transferred to

    strCommand = cstrSftp & " -sftp -l " & pUser & " -pw " & pPass & _
        " " & pFile & " " & pHost & ":" & pRemotePath
    Debug.Print strCommand
    Shell strCommand, 0 ' vbHide

End Sub

这些是我使用此输入文件的 Raspberry Pi 脚本中的行。我稍后在 time.sleep.

中使用这个睡眠时间值
with open('input.txt', 'r') as myfile:
    sleeptime = myfile.read()

sleeptime = float(sleeptime.strip())

这是一个简单的代码,我运行宁只是为了测试这个编码的东西:

#!/usr/bin/env python

import io

with io.open('input.txt', 'r', encoding='utf-8-sig') as myfile:
    sleeptime = myfile.read()

sleeptime = float(sleeptime.strip())

这是我目前遇到的错误。

pi@raspberrypi:~/Temp_Codes $ python try.py
Traceback (most recent call last):
  File "try.py", line 6, in <module>
    sleeptime = myfile.read()
  File "/usr/lib/python2.7/codecs.py", line 314, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
  File "/usr/lib/python2.7/encodings/utf_8_sig.py", line 66, in _buffer_decode
    return codecs.utf_8_decode(input, errors, final)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte

当 Excel/VBA 通过 "CreateTextFile" 创建 Unicode 文件时,它会将其保存为 UTF-16 编码。您看到的是 BOM(字节顺序标记)。

你可以改变

CreateTextFile("C:\Users\xx\Desktop\VBA\input.txt", True, True)

CreateTextFile("C:\Users\xx\Desktop\VBA\input.txt", True, False)

这将另存为 ASCII 文本文件。或者您可以使用

在 Pi/Python 端进行更改
open('input.txt', 'r', encoding='utf-16')