使用:
List<string> columns = new List<string> {"时间","设备编号","计数器","线号","点号"};
var name= DateTime.Now.ToString("yyyy-MM-dd HH mm ss") + " " + cb_type.Text + " " + cb_wave.Text + " " + cb_fre.Text;
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "Execl files (*.xls)|*.xls|文本文件(*.txt)|*.txt";
saveFileDialog.FilterIndex = 0;
saveFileDialog.RestoreDirectory = false;
//saveFileDialog.CreatePrompt = true;
saveFileDialog.Title = "导出文件为...";
saveFileDialog.FileName = name;
DialogResult dr = saveFileDialog.ShowDialog();
if (dr != DialogResult.OK)
{
return ;
}
ExportToExcelOrTxt(dataGridView1, saveFileDialog.FileName, columns);
ExportToExcelOrTxt函数:
fileName为文件路径及名称
columns为需要显示的列及数据
使用的是winform下的DataGridView 控件,若为其他数据,如datatable,可以自行将下面的循环修改
public bool ExportToExcelOrTxt(DataGridView dgvData, string fileName, List<string>columns)
{
StreamWriter sw = new StreamWriter(fileName, false,Encoding.GetEncoding(-0));
string str = "";
try
{
//写标题
for (int i = 0; i < dgvData.ColumnCount; i++)
{
var title = dgvData.Columns[i].HeaderText;
if (columns.Contains(title))
{
if (!string.IsNullOrEmpty(str))
{
str += "\t";
}
str += dgvData.Columns[i].HeaderText;
}
}
//str += "\t" + "时间戳";
sw.WriteLine(str);
//写内容
for (int j = 0; j < dgvData.Rows.Count; j++)
{
string tempStr = "";
DateTime time = default;
for (int k = 0; k < dgvData.Columns.Count; k++)
{
if (columns.Contains(dgvData.Columns[k].HeaderText))
{
if (!string.IsNullOrEmpty(tempStr))
{
tempStr += "\t";
}
string cellValue = dgvData.Rows[j].Cells[k].Value?.ToString();
if (cellValue == null)
{
continue;
}
if (cellValue.Length > 8 && DateTime.TryParse(cellValue, out DateTime time1))
{
time = time1;
}
cellValue = cellValue.Replace(" ", "");
cellValue = cellValue.Replace("\r", "");
cellValue = cellValue.Replace("\n", "");
cellValue = cellValue.Replace("\r\n", "");
tempStr += cellValue;
}
// tempStr += dgvData.Rows[j].Cells[k].Value.ToString();
}
//DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1)); // 当地时区
//long timeStamp = (long)(time - startTime).TotalSeconds; // 相差秒数
//tempStr += "\t" + timeStamp;
sw.WriteLine(tempStr);
}
MessageBox.Show("导出成功");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return false;
}
finally
{
sw.Close();
}
return true;
}