在这个xaml文件中button绑定命令的这一点代码,如下图
<Button x:Name="button1" Content="导出" Command="{Binding MasterCmd}" Grid.Column="1" Grid.Row="1"/>
MasterCmd这个绑定的命令会在后面对应的cs文件中实现,如下图:
public class MainViewModel : ViewModelBase
public MainViewModel()
Messenger.Default.Register<string>(this, "MasterCommand", ExecuteMasterCmd);
//new一个命令出来
MasterCmd = new RelayCommand<string>(ExecuteMasterCmd);
public RelayCommand<string> MasterCmd
private set;
//执行这个命令的函数
void ExecuteMasterCmd(string arg)
//首先模拟建立将要导出的数据,这些数据都存于DataTable中
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Type", typeof(string));
dt.Columns.Add("StationID", typeof(string));
dt.Columns.Add("Time", typeof(string));
DataRow row;
//将数据添加到DataTable中
for (int i = 0; i < 3; i++)
string time = DateTime.Now.ToString("yyyyMMddHHmmss");
row = dt.NewRow();
row["ID"] = "123";
row["Name"] = "成龙";
row["Type"] = "男";
row["StationID"] = "666";
row["Time"] = time;
dt.Rows.Add(row);
string primaryname = "个人信息" + DateTime.Now.ToString("yyyyMMddHHmmss");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;//是否自动添加扩展名
saveFileDialog.OverwritePrompt = true;//文件已存在是否提示覆盖
saveFileDialog.CheckPathExists = true;//提示输入的文件名无效
saveFileDialog.FileName = primaryname;//文件初始名
string path = "d:\\" + saveFileDialog.FileName.ToString() + ".csv";//文件保存路径
System.IO.FileStream fs = new FileStream(path, System.IO.FileMode.Create, System.IO.FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, new System.Text.UnicodeEncoding());
//Tabel 头
for (int i = 0; i < dt.Columns.Count; i++)
sw.Write(dt.Columns[i].ColumnName);
sw.Write("\t");
sw.WriteLine("");
//Table 数据块
for (int i = 0; i < dt.Rows.Count; i++)
for (int j = 0; j < dt.Columns.Count; j++)
sw.Write(dt.Rows[i][j].ToString());
sw.Write("\t");
sw.WriteLine("");
sw.Flush();
sw.Close();
MessageBox.Show("导出成功", "提示");
catch (System.Exception ex)
MessageBox.Show(ex.Message);
运行后点击按钮提示导出成功后在d盘根目录下可以找到文件(你也可以将代码中的路径修改成你想要的)
有时候我们可能还会想自己决定临时将文件放在某处,这样我们可以修改下代码
public class MainViewModel : ViewModelBase
public MainViewModel()
Messenger.Default.Register<string>(this, "MasterCommand", ExecuteMasterCmd);
MasterCmd = new RelayCommand<string>(ExecuteMasterCmd);
public RelayCommand<string> MasterCmd
private set;
void ExecuteMasterCmd(string arg)
string primaryname = "个人信息" + DateTime.Now.ToString("yyyyMMddHHmmss");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "CSV (*.CSV)|*.csv"; ;
saveFileDialog.AddExtension = true;//是否自动添加扩展名
saveFileDialog.OverwritePrompt = true;//文件已存在是否提示覆盖
saveFileDialog.CheckPathExists = true;//提示输入的文件名无效
saveFileDialog.FileName = primaryname;//文件初始名
if (saveFileDialog.ShowDialog() == true)
//首先模拟建立将要导出的数据,这些数据都存于DataTable中
System.Data.DataTable dt = new System.Data.DataTable();
dt.Columns.Add("ID", typeof(string));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Type", typeof(string));
dt.Columns.Add("StationID", typeof(string));
dt.Columns.Add("Time", typeof(string));
DataRow row;
for (int i = 0; i < 3; i++)
row = dt.NewRow();
row["ID"] = "123";
row["Name"] = "成龙";
row["Type"] = "男";
row["StationID"] = "666";
row["Time"] = "2019-4-25";
dt.Rows.Add(row);
string path = saveFileDialog.FileName.ToString();//保存路径
System.IO.FileStream fs = new FileStream(path, System.IO.FileMode.Create, System.IO.FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, new System.Text.UnicodeEncoding());
//Tabel header
for (int i = 0; i < dt.Columns.Count; i++)
sw.Write(dt.Columns[i].ColumnName);
sw.Write("\t");
sw.WriteLine("");
//Table 数据块
for (int i = 0; i < dt.Rows.Count; i++)
for (int j = 0; j < dt.Columns.Count; j++)
sw.Write(dt.Rows[i][j].ToString());
sw.Write("\t");
sw.WriteLine("");
sw.Flush();
sw.Close();
MessageBox.Show("导出成功", "提示");
catch (System.Exception ex)
MessageBox.Show(ex.Message);
修改后启动点击导出如下图:
如果第一种方法运行时出现对路径无访问权限时,是因为vs没有使用管理员权限打开,如下图这种情况:
下面附带第二种方法的源码链接:https://pan.baidu.com/s/1Tkj5yetg7xIkA080ydO1YA
提取码:9vvd
首先做一个界面。只需要一个button就行了,不搞花里胡哨的东西,如下图:在这个xaml文件中button绑定命令的这一点代码,如下图 <Button x:Name="button1" Content="导出" Command="{Binding MasterCmd}" Grid.Column="1" Grid.Row="1"/>MasterCmd这个绑定的命令会在...
FileStream BookStream = new FileStream(saveFileDialog.FileName.ToString(), FileMode.Create, FileAccess.Write);//定义文件流
book.Write(BookStream);//将工作薄写入文件流
BookStream.Seek(0, SeekOrigin.Begin); //输出之前调用Seek(偏移量,游标位置)方法:获取文件流的长度
BookStream.Close();
MessageBox.Show("导出保存成功!");
/// </summary>
/// <param name="dt"></param>eTxt
public static void ExportExcelFile(DataTable dt)
//获取配置文件中导出txt文件路径
string strFilePath = CommConst.TXT_EXPORT_PATH;
if (!Di.
一.首先介绍下CSV以及它和Excel的区别
逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本),文件的每一行都是一个数据记录。每个记录由一个或多个字段组成,用逗号分隔。使用逗号作为字段分隔符是此文件格式的名称的来源,因为分隔字符也可以不是逗号,有时也称为字符分隔值。
CSV广泛用于不同体系结构的应用程序之间交换数据表格信息,解决不...
直接导出
(1)获取DateGrid的表头列(通过Header属性来获取),后面拿它充当Excel的表头
(2)获取DateGrid,通过foreach遍历DateGrid看它有多少列,那么就去创建多少列表头
(3)获取数据(List列表形式),往表格塞数据
先引入好这个程序集(这个程序集在本机安装Office的时候有,在此电脑直接搜索即可)
复制粘贴到项目的bin目录下的Debug目录
然后在项目添加这个引用
SaveFileDialog objSFD = new SaveFileDialog() { DefaultExt = "csv", Filter = "CSV Files (*.csv)|*.csv|Excel XML (*.xml)|*.xml|All files (*.*)|*.*", FilterIndex = 1 };
if (objSFD.ShowDialog(
封装成类,供以后使用(将datagrid导出)using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Controls;
namespace AstroATE
clas...
我可以回答这个问题。WPF 生成.fit文件的代码可以通过使用 Microsoft.Win32.SaveFileDialog 类来实现。具体实现方式可以参考以下代码:
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Filter = "FIT Files (*.fit)|*.fit";
if (saveFileDialog.ShowDialog() == true)
using (FileStream fileStream = new FileStream(saveFileDialog.FileName, FileMode.Create))
// 在此处编写生成.fit文件的代码
当用户选择保存文件时,会弹出一个对话框,用户可以选择保存的文件名和路径。然后,使用 FileStream 类将生成的.fit文件写入到磁盘上。