繁体   English   中英

将每个 Excel 电子表格行与标题保存在单独的 .txt 文件中(保存为参数样本以供模拟程序读取)

[英]Save each Excel-spreadsheet-row with header in separate .txt-file (saved as a parameter-sample to be read by simulation programs)

我是一个建筑能源模拟建模师,有一个 Excel 问题,可以使用参数样本(使用蒙特卡罗生成的样本)进行自动化大规模模拟。 现在我在保存样本时遇到以下问题:

我想以一种“特殊”的方式将 Excel 电子表格的每一行保存在一个单独的 .txt 文件中,以供模拟程序读取。

假设我有以下 excel 文件,其中包含 4 个参数(a、b、c、d)和下面的 20 个值:

a    b    c    d
2    3    5    7
6    7    9    1
3    2    6    2  
5    8    7    6
6    2    3    4

该电子表格的每一行代表一个模拟参数样本。 我想将每一行存储在一个单独的 .txt 文件中,如下所示(因此该电子表格有 5 个“.txt”文件):

“1.txt”应包含:

a=2;
b=3;
c=5;
d=7;

“2.txt”应包含:

a=6;
b=7;
c=9;
d=1;

对于文件“3.txt”、“4.txt”和“5.txt”,依此类推。

因此,对于单独的 .txt 文件中的每一行,基本上将标题与其对应的值进行匹配(“标题等于值;”)。

是否有执行此操作的 Excel 加载项,还是使用某些 VBA 代码更好? 有人有什么想法吗?

(我在模拟建模方面没有经验,但在编程方面没有经验,因此在 Excel 中这是一个相当简单的参数样本保存问题。(如果对你们来说更容易的话,也欢迎 Python 中的解决方案))

我的想法是将PythonPandas一起使用,因为它是最灵活的解决方案之一,因为您的用例将来可能会扩展。

我会尽量让这件事变得简单。 尽管我假设你有 Python,你知道如何通过pipconda安装包,并准备好在你使用的任何系统上运行 python 脚本。

首先,您的脚本需要导入pandas并将文件读入DataFrame

import pandas as pd

df = pd.read_xlsx('path/to/your/file.xlsx')

(请注意,除了pandas之外,您可能还需要安装xlrd包)

现在您拥有了一个强大的数据结构,您可以通过多种方式对其进行操作。 我想最直观的方法是遍历所有项目。 使用字符串格式,最好在此处解释并按照您需要的方式将字符串组合在一起:

outputs = {}

for row in df.index:
    s = ""
    for col in df.columns:
        s += "{}={};\n".format(col, df[col][row])
    print(s)

现在你只需要使用 python 的 io 方法open写入文件。 我将仅按行的索引命名文件,但此解决方案将覆盖由早期运行此脚本创建的旧文本文件。 您可能会添加一些独特的内容,例如日期和时间或您读取的文件的名称,或者通过多次运行脚本进一步增加文件名,例如像这样.

我们一起得到:

import pandas as pd

df = pd.read_excel('path/to/your/file.xlsx')
file_count = 0

for row in df.index:
    s = ""
    for col in df.columns:
        s += "{}={};\n".format(col, df[col][row])

    file = open('test_{:03}.txt'.format(file_count), "w")
    file.write(s)
    file.close()

    file_count += 1

请注意,这可能不是最优雅的方式,并且有一个衬里,但由于您不是程序员,我认为您可能更喜欢更直观的方式,您可以轻松调整自己。

如果您可以将 Excel 电子表格保存为 CSV 文件,那么此 python 脚本将执行您想要的操作。

with open('data.csv') as file:
    data_list = [l.rstrip('\n').split(',') for l in file]

counter = 1

for x in range (1, len (data_list)) :
    output_file_name = str (counter) + '.txt'
    with open (output_file_name, 'w' ) as file :
        for x in range (len (data_list [counter])) :
            print (x)
            output_string = data_list [0] [x] + '=' + data_list [counter] [x] + ';\n'
            file.write (output_string)
    counter += 1

我让它在 Excel 中工作。 您可以扩展变量 x、y 和 z 的长度以匹配您的情况,并使用LastRowLastColumn方法来查找数据集的维度。 我将原始工作表命名为“数据”,如下所示。

Sub TestExportText()

    Dim Hdr(1 To 4) As String
    Dim x As Long
    Dim y As Long
    Dim z As Long

    For x = 1 To 4
        Hdr(x) = Cells(1, x)
    Next x

    x = 1
    For y = 1 To 5

        ThisWorkbook.Sheets.Add After:=Sheets(Sheets.Count)
        ActiveSheet.Name = y
        For z = 1 To 4
        With ActiveSheet
                .Cells(z, 1) = Hdr(z) & "=" & Sheets("Data").Cells(x + 1, z) & ";"
        End With
        Next z
        x = x + 1
        ActiveSheet.Move
        ActiveWorkbook.ActiveSheet.SaveAs Filename:="File" & y & ".txt", FileFormat:=xlTextWindows
        ActiveWorkbook.Close SaveChanges:=False
    Next y

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM