将多个.text文件的内容放入Excel 2010

时间:2012-02-22 20:22:21

标签: excel

有什么方法可以将不同的.txt文件(实际上是所有.txt文件的内容)的内容放到Excel 2010中?我需要一个单元格(A1)作为文件的名称,另一个单元格(A2)作为该.txt文件的全部内容。其他.txt文件也是如此,即B1-B2,C1-C2等

提前致谢。

1 个答案:

答案 0 :(得分:1)

如果CSV可以接受,您可以编写一个小程序来读取给定目录中的所有文本文件,并以CSV格式写出您需要的数据:

"File Name 1","Contents of File 1" 
"File Name 2","Contents of File 2"

如果在Excel中打开CSV,数据将按照您指定的方式显示。

如果您必须拥有真正的Excel文件(.xls,.xlsx),则可以使用Interop从C#访问Excel库,但此解决方案稍微复杂一些。

http://msdn.microsoft.com/en-us/library/ms173186(v=vs.80).aspx

您可以使用Directory.EnumerateFiles列出所需文件夹中的所有文件名,并使用File.ReadAllText读取每个文件的内容。

使用CSV文件时,输出的正确引用会有一些细微差别(请参阅我的答案开头的维基百科链接)。我写了一点extension method,以便更容易输出正确引用的CSV:

   static public class Extensions
    {
        static public string CsvQuote(this string text)
        {
            if (text == null)
            {
                return string.Empty;
            }

            bool containsQuote = false;
            bool containsComma = false;
            int len = text.Length;
            for (int i = 0; i < len && (containsComma == false || containsQuote == false); i++)
            {
                char ch = text[i];
                if (ch == '"')
                {
                    containsQuote = true;
                }
                else if (ch == ',')
                {
                    containsComma = true;
                }
            }

            bool mustQuote = containsComma || containsQuote;

            if (containsQuote)
            {
                text = text.Replace("\"", "\"\"");
            }

            if (mustQuote)
            {
                return "\"" + text + "\"";  // Quote the cell and replace embedded quotes with double-quote
            }
            else
            {
                return text;
            }
        }

    }

编辑:

关闭我的头脑(未调试或任何东西),写出CSV的代码可能如下所示:

string myDirectory = @"C:\Temp";
StringBuilder csv = new StringBuilder();
foreach (string fileName in Directory.EnumerateFiles(myDirectory))
{
    string fileContents = File.ReadAllText(fileName);
    csv.Append(fileName).Append(",").AppendLine(fileContents.CsvQuote());
}
File.WriteAllText(@"C:\SomePath\SomeFile.csv", csv.ToString());