使用Spire库实现格式转换时遇System.ArgumentException路径无效错误求助
问题分析与解决方案
核心错误原因
FileSystemWatcher的构造函数要求传入目录路径,但你传入的是TextBox1.Text里的文件完整路径,这直接导致"目录名称无效"的参数异常。此外代码逻辑完全偏离需求:你需要转换已选择的文件,而非监听目录新增文件,FileSystemWatcher属于误用。
修正方案
直接基于Spire库处理单个/多个选中文件的格式转换,无需依赖Office Interop(避免Office安装依赖),同时支持多文件路径解析:
步骤1:处理多文件路径解析
假设TextBox1.Text中的多文件路径用换行分隔(文件对话框多选后通常是这种格式),先拆分路径列表。
步骤2:针对不同文件类型编写转换逻辑
分别使用Spire.Xls、Spire.Doc、Spire.Presentation处理对应格式转换。
修正后的完整代码
private void BTNConvert_Click(object sender, EventArgs e) { // 拆分TextBox中的文件路径(按换行分隔,适配多选文件场景) var filePaths = textBox1.Text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); if (filePaths.Length == 0) { MessageBox.Show("请选择要转换的文件"); return; } foreach (var filePath in filePaths) { try { var extension = Path.GetExtension(filePath).ToLower(); var outputPath = Path.ChangeExtension(filePath, extension + "x"); switch (extension) { case ".xls": // 用Spire.Xls转换xls到xlsx var xlsWorkbook = new Spire.Xls.Workbook(); xlsWorkbook.LoadFromFile(filePath); xlsWorkbook.SaveToFile(outputPath, Spire.Xls.ExcelVersion.Version2016); xlsWorkbook.Dispose(); break; case ".doc": // 用Spire.Doc转换doc到docx var docDocument = new Spire.Doc.Document(); docDocument.LoadFromFile(filePath); docDocument.SaveToFile(outputPath, Spire.Doc.FileFormat.Docx); docDocument.Dispose(); break; case ".ppt": // 用Spire.Presentation转换ppt到pptx var pptPresentation = new Spire.Presentation.Presentation(); pptPresentation.LoadFromFile(filePath); pptPresentation.SaveToFile(outputPath, Spire.Presentation.FileFormat.Pptx2016); pptPresentation.Dispose(); break; default: MessageBox.Show($"不支持的文件格式:{extension}"); continue; } MessageBox.Show($"文件转换完成:{outputPath}"); } catch (Exception ex) { MessageBox.Show($"转换文件失败 {filePath}:{ex.Message}"); } } }
额外注意事项
- 确保已通过NuGet安装对应Spire包:
Spire.Xls、Spire.Doc、Spire.Presentation - 若使用文件对话框多选,直接将对话框的
FileNames数组拼接换行后赋值给TextBox1.Text即可 - 转换后的文件会保存在原文件同目录,后缀新增"x"(如
test.xls→test.xlsx)
内容的提问来源于stack exchange,提问作者Aamir Karim
相关产品推荐
相关产品推荐

