IT정보공유/C#

[ C# ] ListView 의 내용을 CSV 파일 형식으로 저장하는 방법

알지오™ 2017. 7. 10.

c#에서 엑셀파일(xls) 형태로 파일 저장할 때, 써드파티 콤포넌트등을 싸용하지 않는다면 

Excel.Application 이라는 Office Automation COM API를 이용해야 합니다.

ListView 의 내용을 CSV 파일 형식으로 저장하는 방법

 

하지만 이 방법에는 큰 단점이 있는데요. 바로 Excel 문서를 만드는 속도가 현저하게 느리다는 

문제점이 있습니다.

 

그래서 EXCEL과 호환 형식인 CSV(Comma Separated values) 형식의 텍스트 파일 형태로 저장하는 편이

훨씬 속도와 성능면에서 훌륭합니다.

(데브익스프레스 같은 상용 컴포넌트 툴을 쓸 경우엔 해당사항이 없는 이야기입니다.)

 

StreamWriter 를 이용한 ListView의 내용을 CSV 파일로 저장 방법

리스트뷰의 행과 열의 숫자만큼 반복해서 WriteLine 함수를 호출하여 파일에 기록한다. 이 때 혹시 모를 엑셀파일의 파일개행 문자를 처리하기 위해 replace 함수를 통해 개행 문자를 처리했다. 음 배려심 훌륭해.

 
public void ListViewExportCSV(System.Windows.Forms.ListView lv, string strFileName)
{
    string filename;
    FileDialog filedlg = new System.Windows.Forms.SaveFileDialog();

    filedlg.FileName = strFileName;
    filedlg.Filter = "Excel File (*.csv)|*.csv";

    if (DialogResult.Cancel == filedlg.ShowDialog())
        return;

    if (filedlg.FileName != "")
        filename = filedlg.FileName;
    else
        return;


    try
    {
        if (File.Exists(filename))
            File.Delete(filename);

        StreamWriter sw = new StreamWriter(filename, false, Encoding.Unicode);
        
        // Head 입력하기
        String columnheader = "";
        for (int i = 0; i < lv.Columns.Count; i++)
        {
            columnheader += lv.Columns[i].Text + "\t";
        }
        sw.WriteLine(columnheader);


        string strText = "";
        // 내용 입력하기
        for (int i = 0; i < lv.Items.Count; i++)
        {
            strText = "";

            for (int j = 0; j < lv.Columns.Count; j++)
            {
                strText += lv.Items[i].SubItems[j].Text.Replace("\r", "").Replace("\n", "") + "\t";
            }
            sw.WriteLine(strText);
        }

        sw.Close();

        MessageBox.Show("저장 완료!");
    }
    catch (Exception err)
    {
        MessageBox.Show(err.Message);
    }

}

뭐 별거 아닌 거지만 도움이 되시면 좋겠습니다.

댓글

💲 추천 글