그러냐

엑셀의 CSV파일형태로 저장하기 본문

c#

엑셀의 CSV파일형태로 저장하기

관절분리 2016. 1. 28. 11:26
반응형
<meta name="GENERATOR" content="DEXTWebEditor" />
엑셀의 CSV파일형태로 저장하기 | WinForm Program 2009-12-03 오후 7:10:18
손성길 (redprod) 번호: 119293 추천:0 / 읽음:1,010

일반적으로CSV로 저장할때는 아래 코드를 사용했습니다.

 

SaveFileDialog SaveFileDlg = new SaveFileDialog();

SaveFileDlg.InitialDirectory = @"C:\";

SaveFileDlg.Filter = "csv파일(*.csv) | *.csv | 모든파일(*.*)|*.*";

SaveFileDlg.FilterIndex = 1;

SaveFileDlg.RestoreDirectory = true;

DialogResult Ret = SaveFileDlg.ShowDialog();

if (Ret == DialogResult.OK)

{

StreamWriter OutPut = new StreamWriter(new FileStream(@SaveFileDlg.FileName, FileMode.Create));

for (int i = 0; i < lv_now.Items.Count; i++)

{

OutPut.Write(lv_now.Items[i].SubItems[0].Text);

for (int j = 1; j < lv_now.Items[1].SubItems.Count; j++)

{

if (lv_now.Items[i].SubItems[j].Text != "" )

{

OutPut.Write(", "+lv_now.Items[i].SubItems[j].Text);

}

else

{

OutPut.Write(", ");

}

}

OutPut.Write("\r\n");

}

OutPut.Close();

MessageBox.Show("파일을 저장했습니다.", "파일 저장", MessageBoxButtons.OK, MessageBoxIcon.Information);

}

}

 

그리고 불러올때는 얼마전 구분자 문제가 발생하여

 

static string[] SplitCSVString(string str)
{
if (str == null) throw new ArgumentNullException("str");
int pos;
int len;
int last;
char ch;
bool quot;
ArrayList splitted;
pos = 0;
len = str.Length;
last = 0;
ch = Char.MinValue;
quot = false;
splitted = new ArrayList();

while (pos < len)
{
ch = str[pos];
if (!quot && ch == ',')
{
string val = str.Substring(last, pos - last);
if (val.StartsWith("\"") && val.EndsWith("\""))
{
val = val.Substring(1, val.Length - 2);
}
splitted.Add(val);
last = pos + 1;
}
else if (ch == '"')
{
quot = !quot;
}
pos += 1;
}
if (ch == ',') splitted.Add("");
return (string[])splitted.ToArray(typeof(string));
}

 

이런식으로 따옴표확인해가며 가졌왔었는데...

조동현님의 소개로

 

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=119226&ref=119226

 

위 주소와 같이 잘 해결 되었습니다.

혹시 이 반대의 경우도 가능할 것 같은데... 참고 자료가 없네요.

 

 

public DataTable GetTable(string fileName)
{
DbConnectionStringBuilder csb = new DbConnectionStringBuilder();
csb["Provider"] = "Microsoft.Jet.OLEDB.4.0";
csb["Data Source"] = Path.GetDirectoryName(fileName);
csb["Extended Properties"] = "Text;HDR=YES";
string cs = csb.ConnectionString;


using (OleDbConnection txtconnection = new OleDbConnection(cs))
{
txtconnection.Open();
OleDbCommand command = new OleDbCommand(string.Format("Select * from {0}", Path.GetFileName(fileName)), txtconnection);

OleDbDataAdapter adapter = new OleDbDataAdapter(command);

DataTable table = new DataTable();
adapter.Fill(table);

return table;
}
}

 

 

이것의 반대의 경우 datatable에서 file로는 어떻게 이루어 지는지 궁금합니다.

select 구문을 Insert구문으로 만들면 될듯한데... ㄷㄷㄷ

 

 

 

 

출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNO=8&no=119293&ref=119293&page=1

 

반응형