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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 12:52:38