You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 使用Microsoft.Office.Interop.Excel将DataTable写入Excel报错如何处理

问题根因

报错的直接原因是你生成的文件名包含Windows系统禁止使用的特殊字符:你在拼接文件名时使用了DateTime.Now.ToString("dd-MM-yy_hh:mm:ss"),输出的时间部分带有冒号:,该字符属于系统禁止出现在文件名中的字符,直接触发保存失败。

修复方案
    1. 修改时间格式,替换非法的冒号字符
      将生成文件路径的代码中的时间格式调整,把冒号替换为下划线、短横线等合法字符即可,修改后代码如下:
// 原代码
// string location = Path.Combine(dir, "HavingDues_log_"+name+"_" + DateTime.Now.ToString("dd-MM-yy_hh:mm:ss") + ".xls");
// 修改后代码
string location = Path.Combine(dir, "HavingDues_log_"+name+"_" + DateTime.Now.ToString("dd-MM-yy_hh-mm-ss") + ".xls");
    1. 过滤其他变量的非法字符
      如果name变量来自数据库、用户输入等不可控来源,建议对name也做非法字符过滤,避免特殊字符导致报错,参考代码:
char[] invalidFileNameChars = Path.GetInvalidFileNameChars();
// 把name中的非法字符替换为下划线
string safeName = new string(name.Select(c => invalidFileNameChars.Contains(c) ? '_' : c).ToArray());
string location = Path.Combine(dir, "HavingDues_log_"+safeName+"_" + DateTime.Now.ToString("dd-MM-yy_hh-mm-ss") + ".xls");
    1. 确认目录写入权限
      部分Windows设备会限制普通权限程序写入C盘根目录的文件夹,你可以先手动打开C:\Output\Log\HavingDuesLog目录,尝试新建文件确认权限正常,也可以将输出目录修改为当前用户的个人目录,避免权限问题:
// 将输出目录设置为我的文档下的HavingDuesLog文件夹
string dir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "HavingDuesLog");
    1. 兼容高版本Excel格式
      如果你使用的是Excel 2007及以上版本,建议保存为xlsx格式,避免旧版xls格式的兼容限制,修改两处即可:
    2. 将文件名后缀从.xls改为.xlsx
    3. 将SaveAs方法的格式参数从XlFileFormat.xlWorkbookNormal改为XlFileFormat.xlOpenXMLWorkbook

内容的提问来源于stack exchange,提问作者Moeez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 19:24:01