【问题标题】:How to write a List<List<string>> to an Excel (.xls or .xlsx) file?如何将 List<List<string>> 写入 Excel(.xls 或 .xlsx)文件?
【发布时间】:2013-07-01 09:31:17
【问题描述】:

我想使用 C# 将一些数据写入 Excel 文件(.xls 或 .xlsx)。

这是我目前的代码:

int length = readData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Length;

List<List<string>> dataList = new List<List<string>>();

foreach (string line in readData.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
{
    List<string> partsLine = new List<string>();
    partsLine.AddRange(line.Split('\t'));
    dataList.Add(partsLine);
}          

所以,我将所有数据分成几行。

然后我用'\t'分隔符分割每一行,并将该行的每一部分添加到一个列表中。

最后我有一个包含所有分割线列表的列表。

所以列表看起来像:

  • List1 {txt1, txt 2} = 第一行
  • List2 {txt3, txt 4, txt 5, txt 6} = 第二行
  • List3 {txt7, txt 8, txt 9, txt 10} = 第三行
  • List4 {txt 11, txt 12} 等

所有列表的长度都不一样。

我想做的是将所有列表写入 CSV 文件。

每个列表将填充一行和一定数量的列,具体取决于列表的长度(即 txt1 应为 (row1, col1),txt2 应为 (row1, col2),txt3 应为 (row2, col1 ), txt4 将是 (row2, col2)...)。

我已经设法将数据导出到 .csv 文件中,但是当我尝试使用 .xls(或 .xlsx)时,数据格式不正确。

这是 .csv 编写的代码:

        const string separator = ";";

        // Writing the list to the .csv file
        try
        {
            using (StreamWriter writer = new StreamWriter(path + "\\data.csv", false))
            {
                dataList.ForEach(line =>
                {
                    var lineArray = line.Select(c => c.Contains(separator) ? c.Replace(separator.ToString(), "\\" + separator) : c).ToArray();
                    writer.WriteLine(string.Join(separator, lineArray));
                });
            }
        }
        catch (Exception ex)
        {
            textBoxData.AppendText("Error while writing data to .csv file (" + ex.Message + ")");
        }

谢谢

【问题讨论】:

  • 对不起,我真的不知道我是否理解你的问题。但是您是否知道 XLS/XLSX 文件具有特定的内部结构?这明明不是简单的分隔文件?
  • 嗨。不确切知道您的问题是什么,以及您要达到的目标。但是话又说回来,除了流写入器之外,您的所有代码似乎都只是以下writer.Write(.Replace(";", "\\;").Replace("\t", ";") 如果是这样,这将输出一个有效的 CSV(但分号)文件。我已经尝试使用以下字符串“a\tb\tc\r\nd\te”,并且 excel 设法打开了结果。

标签: c# excel export xls xlsx


【解决方案1】:

您可以使用 OLEDB 连接来连接到 excel 文件,然后像使用 SQL 连接一样对其进行写入。如果您没有理由需要 CSV,那就这样做吧。

【讨论】:

    【解决方案2】:

    我设法将我的List&lt;list&lt;string&gt;&gt; 写在一个 xls 文件中,这是我的代码:

        private void CreateXLS(string data)
        {
            Excel.Application xlApp;
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            object misValue = System.Reflection.Missing.Value;
    
            string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\data.xls";
    
            xlApp = new Excel.Application();
            xlWorkBook = xlApp.Workbooks.Add(misValue);
    
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    
            // List of lists containing each line split by part
            List<List<string>> dataList = new List<List<string>>();
    
            List<string> valuesA = new List<string>();
    
            // Building the list
            foreach (string line in data.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries))
            {
                List<string> partsLine = new List<string>();
                partsLine.AddRange(line.Split('\t'));
                dataList.Add(partsLine);
            }
    
            int row = 1;
            int col = 1;
    
            foreach (List<string> list in dataList)
            {
                foreach (string str in list)
                {
                    xlWorkSheet.Cells[row, col] = str;
    
                    if (list.IndexOf(str) == list.Count - 1)
                        col = 1;
                    else
                        col++;
                }
                row++;
            }
    
    
            xlWorkBook.SaveAs(path, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
            xlWorkBook.Close(true, misValue, misValue);
            xlApp.Quit();
    
            releaseObject(xlWorkSheet);
            releaseObject(xlWorkBook);
            releaseObject(xlApp);
    
            textBoxData.AppendText("\nData saved to .xls file (path : " + path + ")");
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多