将List <string>和List <double>保存到.text文件特定列</double> </string>

时间:2013-10-17 14:11:09

标签: c# excel text

我有一个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很难,则可以接受此解决方案。

非常感谢你!

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
            }
        }