在Linux系统下使用OLEDB操作Excel时创建文件失败求助
问题:连接Ubuntu服务器上的Excel文件报错“Failure creating file”
问题场景
- 目标文件:Ubuntu服务器上的Excel文件,路径格式:
string filePath = @"\\serverIP\fileName.xlsx";
- 使用的连接字符串:
string connectionString = $@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filePath};Extended Properties='Excel 12.0;'";
- 操作代码:
string DataSource = @"\\serverIP\fileName.xlsx"; public static void botEdit(string editString,string DataSource,int x) { try { OleDbCommand com = new OleDbCommand(); OleDbConnection con = new OleDbConnection($"Provider=Microsoft.ACE.OLEDB.12.0;Data Source ={DataSource};Extended Properties='Excel 12.0 Xml;HDR=YES;'"); con.Open(); com.Connection = con; com.CommandText = editString; com.ExecuteNonQuery(); if (x > 1) { MessageBox.Show("Done"); } con.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
- 报错信息:
Failure creating file
解决思路及方案
1. 排查Ubuntu SMB共享配置
你用的SMB路径(\\serverIP\fileName.xlsx)依赖Ubuntu的SMB服务,先确认以下几点:
- 确保Ubuntu已安装并启动
samba服务,目标文件所在目录已添加到SMB共享配置(/etc/samba/smb.conf),配置中需指定正确的读写权限。 - 检查文件系统权限:Ubuntu上目标文件的所属用户/组需允许SMB访问账号读取和写入。
- 手动验证:在Windows资源管理器输入
\\serverIP,尝试打开共享并编辑Excel文件,确认账号有权限。
2. 替换为跨平台Excel操作库
Microsoft ACE OLEDB是Windows专属驱动,通过SMB访问Linux文件时容易出现协议兼容和临时文件权限问题,推荐改用跨平台库:
EPPlus示例(适合.NET/.NET Core)
using OfficeOpenXml; public static void botEdit(string editString, string dataSource, int x) { try { // EPPlus 5+需设置许可证上下文 ExcelPackage.LicenseContext = LicenseContext.NonCommercial; using (var package = new ExcelPackage(new FileInfo(dataSource))) { var worksheet = package.Workbook.Worksheets.First(); // 根据你的editString逻辑执行操作,示例:修改单元格值 // worksheet.Cells["A1"].Value = "Updated Content"; package.Save(); if (x > 1) { MessageBox.Show("Done"); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
- 其他可选库:NPOI,支持多种Excel格式,适合复杂数据操作。
3. 修正路径格式
SMB共享路径应为\\serverIP\共享文件夹名\fileName.xlsx,而非直接\\serverIP\fileName.xlsx——除非你将Ubuntu根目录设为共享(不推荐),否则路径格式错误会导致驱动找不到文件,进而触发“Failure creating file”错误。
4. 规避ACE驱动的临时文件限制
ACE驱动在访问网络共享文件时,需要在本地或共享目录创建临时文件,如果没有对应权限就会报错。改用跨平台库可以彻底绕过这个限制,无需依赖OLEDB的临时文件机制。
内容的提问来源于stack exchange,提问作者TREX 20
相关产品推荐
相关产品推荐

