【C#】本地下载附件(Excel模板)

系列文章

【C#】单号生成器(编号规则、固定字符、流水号、产生业务单号)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范围生成器(开始日期、结束日期)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】组件化开发,调用dll组件方法
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129492112

【C#】数据实体类使用
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】单据审批流方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】二维码标签制作及打印
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全单据打印源码(设计打印模板、条形码&二维码、标签、字体)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】条码管理操作手册
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】IIS平台下,WebAPI发布及异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】【提高编程效率】代码模板生成工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】【提高编程效率】Excel数据批量导入数据库
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】Windows服务(Service)安装及启停方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任务计划实现,使用Quartz类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】《周计划管理关于产前准备模块》解决方案20200203
本文链接:https://blog.csdn.net/youcheng_ge/article/details/122919543

【C#】源码解析正则表达式
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】软件版本和文件MD5记录(XML操作)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】测试网络是否连通
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】根据名称获取编码(Dictionary获取key方法)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129816701

【C#】数据建模,你是使用DataTable还是List?
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129792726

【C#】GridControl控件和List数据集双向绑定
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129423755

【C#】GridControl动态更换DataSource,数据查询异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/130305424



前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

·提示:本专栏为项目实战篇,未接触项目开发的同学可能理解困难,不推荐阅读。
3A0N000001


一、问题描述

解决程序中下载附件,比如 下载Excel模板、下载 报销单模板等,不连接服务器,纯单机形式。资源占用小。

二、解决方案

将Excel放在程序中,然后以二进制形式写文件流。

三、软件开发(源码)

3.1 添加资源文件

新建–>资源文件,重命名 Res.resx
在这里插入图片描述
Ctrl+V 拷贝进Excel模板。
在这里插入图片描述

3.2 引入命名空间

using System.IO;
using System.Windows.Forms;

3.3 实现代码

	private void Mi_DownExcel_Click(object sender, EventArgs e)
	{
	    //实例化一个保存文件对话框
	    SaveFileDialog sf = new SaveFileDialog();
	    //设置文件保存类型
	    sf.Filter = "Excel 工作簿|*.xlsx|Excel 97-2003 工作簿|*.xls|所有文件(*.*)|*.*";
	    //如果用户没有输入扩展名,自动追加后缀
	    sf.AddExtension = true;
	    //设置标题
	    sf.Title = "母线质量信息登记";
	    sf.FileName = "母线质量信息登记";
	    //如果用户点击了保存按钮
	    if (sf.ShowDialog() == DialogResult.OK)
	    {
	        //实例化一个文件流--->与写入文件相关联
	        FileStream fs = new FileStream(sf.FileName, FileMode.Create);
	        //获得字节数组
	        byte[] data = Res.母线质量信息登记;
	        //开始写入
	        fs.Write(data, 0, data.Length);
	        //清空缓冲区、关闭流
	        fs.Flush();
	        fs.Close();
	
	        FrmTips.ShowTipsSuccess(this, "下载成功!");
	    }
	}

方法二:
使用DevExpress控件。

//函数内容: 菜单按钮,Excel模板下载
//函数版本: 0.0.0.1
//修改时间: 2023.05.11
//============================================================================================
//注意事项
//  1.  
//  2.  
//============================================================================================
private void Mi_ExcelDown_Click(object sender, EventArgs e)
{
   try
   {
       XtraSaveFileDialog sf = new XtraSaveFileDialog();
       sf.Filter = "Excel 工作簿|*.xlsx|Excel 97-2003 工作簿|*.xls|所有文件(*.*)|*.*";
       sf.AddExtension = true;
       sf.ValidateNames = true;
       sf.Title = "模具检验Excel模板";
       sf.FileName = "模具检验Excel模板";
       if (sf.ShowDialog() == DialogResult.OK)
       {
           //FileStream fs = new FileStream(sf.FileName, FileMode.Create);
           //byte[] data = Resource .母线质量信息登记;
           //fs.Write(data, 0, data.Length);
           //fs.Flush();
           //fs.Close();
       }
   }
   catch (Exception ex)
   {
       BaseHMI.ShowWarn("Excel模板下载异常 Mi_ExcelDown_Click:" + ex);

   }
}

四、项目展示

五、资源链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
检测指定目录是否存在, 检测指定文件是否存在, 如果存在则返回true, 获取指定目录中所有文件列表,获取指定目录中所有子目录列表, 取指定目录及子目录中所有文件列表, 指定目录的绝对路径,检测指定目录是否为空, 检测指定目录中是否存在指定的文件, 若要搜索子目录请使用重载方法., 检测指定目录中是否存在指定的文件, 创建目录, 删除目录, 创建文件, 移动文件(剪贴--粘贴), 复制文件, 根据时间得到目录名 / 格式:yyyyMMdd 或者 HHmmssff, 根据时间得到文件名HHmmssff, 根据时间获取指定路径的 后缀名的 的所有文件, 复制文件夹,检查文件, 如果文件不存在则创建, 删除指定文件夹对应其他文件夹里的文件, 从文件的绝对路径中获取文件名( 包含扩展名 ), 复制文件参考方法,页面中引用, 创建一个目录, 创建一个文件, 并将字节流写入文件, 获取文本文件的行数, 获取一个文件的长度, 单位为Byte, 获取文件大小并以B,KB,GB,TB, 获取指定目录中的子目录列表, 向文本文件写入内容, 向文本文件的尾部追加内容, 将现有文件的内容复制到新文件中, 将文件移动到指定目录, 从文件的绝对路径中获取文件名( 不包含扩展名 ), 从文件的绝对路径中获取扩展名 以上每一行为一个方法, 例子如下: #region 清空指定目录 /// /// 清空指定目录下所有文件及子目录,但该目录依然保存. /// /// 指定目录的绝对路径 public static void ClearDirectory(string directoryPath) { directoryPath = HttpContext.Current.Server.MapPath(directoryPath); if (IsExistDirectory(directoryPath)) { //删除目录中所有的文件 string[] fileNames = GetFileNames(directoryPath); for (int i = 0; i < fileNames.Length; i++) { DeleteFile(fileNames[i]); } //删除目录中所有的子目录 string[] directoryNames = GetDirectories(directoryPath); for (int i = 0; i < directoryNames.Length; i++) { DeleteDirectory(directoryNames[i]); } } } #endregion #region 清空文件内容 /// /// 清空文件内容 /// /// 文件的绝对路径 public static void ClearFile(string filePath) { //删除文件 File.Delete(filePath); //重新创建该文件 CreateFile(filePath); } #endregion #region 删除指定目录 /// /// 删除指定目录及其所有子目录 /// /// 指定

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花北城

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值