0

我有一个 C# WinForm 应用程序,它有很多List<string>List<double>. 我需要创建一个新的 .txt 文件并将每个文件保存List<>到文本文件的特定列中。

我尝试了 WriteAllLines 函数,但它写了一个List<>

我还尝试创建一个 Excel 文件,以便我可以指定要List<>保存到哪一列。但是我很难将临时 excel 文件保存为 .txt 文件。

我知道这段代码可以将现有的 excel 文件保存为 PDF,但是不存在将 excel 保存为文本文件的类似功能。

NewExcelWorkBook.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypePDF, "Holdings in BE Import Format.txt", Excel.XlFixedFormatQuality.xlQualityStandard, true,
                                                          false, 1, 10, true);

请告诉我一种将多个写入List<>特定 .txt 文件列的方法,或者您可以告诉我如何将 excel 文件另存为 .txt 文件。跳过临时 excel 文件是理想的,但如果直接写入 .txt 很难,这种解决方案是可以接受的。

太感谢了!

4

2 回答 2

3

如果您希望第一列的大小固定为 20 个字符,您可以尝试以下操作:

List<string> stringList = new List<string>
    {
        "ABCDEF",
        "DEF",
        "GHIAAAAAAAAAAAAAA",
        "SOMETHNG LONGER THAN 20 characters",
    };

List<double> doubleList = new List<double>
    {
        1d,
        2,
        3,
        4
    };

List<string> combined = new List<string>();
int count = stringList.Count >= doubleList.Count ? stringList.Count : doubleList.Count;
for (int i = 0; i < count; i++)
{
    string firstColumn = stringList.Count <= i ? "" : stringList[i];
    string secondColumn = doubleList.Count <= i ? "" : doubleList[i].ToString();
    if (firstColumn.Length > 20)
    {
        //truncate rest of the values
        firstColumn = firstColumn.Substring(0, 20);
    }
    else
    {
        firstColumn = firstColumn + new string(' ', 20 - firstColumn.Length);
    }
    combined.Add(string.Format("{0} {1}", firstColumn, secondColumn));
}

File.WriteAllLines("yourFilePath.csv", combined);

输出文件如下:

ABCDEF               1
DEF                  2
GHIAAAAAAAAAAAAAA    3
SOMETHNG LONGER THAN 4
于 2013-10-17T14:19:56.810 回答
0
        List<string> list1 = new List<string>();
        List<int> list2 = new List<int>();
        //...
        string separator = "\t";
        using (StreamWriter writer = new StreamWriter(fileName)){
            for (int i = 0; i<Math.Max(list1.Count, list2.Count); i++){
                var element1 = i < list1.Count ? list1[i] : "";
                var element2 = i < list2.Count ? list2[i].ToString() : "";
                writer.Write(element1);
                writer.Write(separator);
                writer.WriteLine(element2);
            }
        }
于 2013-10-17T14:19:19.897 回答