0

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} = 2 行目
  • List3 {txt7, txt 8, txt 9, txt 10} = 3 行目
  • 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 + ")");
        }

ありがとう

4

2 に答える 2

0

OLEDB 接続を使用して Excel ファイルに接続し、SQL 接続と同じように書き込むことができます。CSV が必要な理由がない場合は、そのようにしてください。

于 2013-07-03T15:47:57.540 に答える
0

List<list<string>>は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 + ")");
    }
于 2013-07-04T10:24:45.487 に答える