C#將gridcontrol中的資料匯出到.csv檔案
C# 匯出CSV 然後用excel開啟,主要是用逗號來分割開每一列,匯出時間格式的時候必須要經過字元替換,否則出現亂碼。
//檔案匯出
private void btnExport_Click(object sender, EventArgs e)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.DefaultExt = "*.csv";
saveFileDialog.AddExtension = true;
saveFileDialog.Filter = "csv files|*.csv";
saveFileDialog.OverwritePrompt = true;
saveFileDialog.CheckPathExists = true;
saveFileDialog.FileName = "Alarm_" + ReplaceChars(DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss"));
DialogResult result = saveFileDialog.ShowDialog();
if (saveFileDialog.FileName != null) //開啟儲存檔案對話方塊
{
string fileName = saveFileDialog.FileName;//檔名字
using (StreamWriter streamWriter = new StreamWriter(fileName, false, Encoding.Default))
{
StringBuilder sb = new StringBuilder();
sb.Append("事件發生時間").Append(",");
sb.Append("事件名稱").Append(",");
sb.Append("告警級別").Append(",");
sb.Append("告警物件").Append(",");
streamWriter.WriteLine(sb.ToString());
//要寫的資料來源
for (int i = 0; i < dtPub.Rows.Count; i++)
{
StringBuilder sbline = new StringBuilder();
sbline.Append(ReplaceSpecialChars(dtPub.Rows[i][0].ToString()) + ",");
sbline.Append((dtPub.Rows[i][1] + ","));
sbline.Append((dtPub.Rows[i][2] + ","));
sbline.Append((dtPub.Rows[i][3]));
streamWriter.WriteLine(sbline.ToString());
}
streamWriter.Flush();
streamWriter.Close();
}
}
if (File.Exists(saveFileDialog.FileName))
{
try
{
if (DialogResult.Yes == MessageBox.Show("檔案已成功匯出,是否開啟檔案?", "提示", MessageBoxButtons.YesNo))
{
{
System.Diagnostics.Process.Start(saveFileDialog.FileName);
}
}
}
catch
{
String msg = "該檔案不能開啟" + Environment.NewLine + Environment.NewLine + "Path: " + saveFileDialog.FileName;
MessageBox.Show(msg, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
String msg = "該檔案不能儲存" + Environment.NewLine + Environment.NewLine + "Path: " + saveFileDialog.FileName; MessageBox.Show(msg, "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
//特殊字元替換
public string ReplaceSpecialChars(string input)
{
// space -> _x0020_ 特殊字元的替換
// % -> _x0025_
// # -> _x0023_
// & -> _x0026_
// / -> _x002F_
if (input == null) return "";
input = input.Replace(" ", "__");
return input;
}
//檔案命名字串替換
public string ReplaceChars(string input)
{
if (input == null) return "";
input = input.Replace(" ","_")
.Replace(":","")
.Replace("/","");
return input;
}