冬至 发表于 2023-4-15 11:22:47

如何实现FpSpread导出多个Excel文件并由用户指定路径

本帖最后由 冬至 于 2023-4-18 15:32 编辑

问题描述:

我希望可以将FpSpread的多个sheet在导出时,一次性导出为多个Excel文件(每个sheet一个文件),而且想由用户来指定路径。

尝试:
1、导出为多个excel文件的代码:

FpSpread tempsp = new FarPoint.Win.Spread.FpSpread();
                  tempsp.Sheets.Count = 1;
                  int i = 0;
                  foreach (SheetView sh in fpsYMTC.Sheets)
                  {

                        tempsp.Sheets = sh.Clone();
                        tempsp.SaveExcel(sh.SheetName + ".xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat);
                        i++;
                  }
当前代码的问题是,保存的文件路径是当前路径。

2、尝试使用SaveFileDialog由用户指定路径的代码:

FpSpread tempsp = new FarPoint.Win.Spread.FpSpread();
            tempsp.Sheets.Count = 1;
            int i = 0;
            foreach (SheetView sh in fps.Sheets)
            {
                tempsp.Sheets = sh.Clone();
                using (var form = new SaveFileDialog())
                {
                  form.Filter = "Excel Files|*.xlsx";
                  form.DefaultExt = "xlsx";
                  form.FileName = sh.SheetName;
                  if (form.ShowDialog() == DialogResult.OK)
                  {
                        tempsp.SaveExcel(form.FileName + ".xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat);
                        i++;
                  }
                }
               
            }

这样可以,但这样的问题在于,每一个sheet导出我都要选择一次路径,如果有40个sheet,就要点击40次,显然也不是我想要的。
3、如果将SaveFileDialog放到循环的外侧,试图选择一次路径的时:

FpSpread tempsp = new FarPoint.Win.Spread.FpSpread();
            tempsp.Sheets.Count = 1;
            int i = 0;
            using (var form = new SaveFileDialog())
            {
                form.Filter = "Excel Files|*.xlsx";
                form.DefaultExt = "xlsx";
                form.FileName = fps_Sheet1.SheetName;
                if (form.ShowDialog() == DialogResult.OK)
                {
                  foreach (SheetView sh in fps.Sheets)
                  {
                        tempsp.Sheets = sh.Clone();
                        tempsp.SaveExcel(sh.SheetName + ".xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat);
                        i++;
                  }
                }
            }

保存不会成功。用户选择时需要指定文件名,一旦导出时文件名不一致,就不会导出成功

所以我想问,有没有一种方式,可以让用户提前并且只选择路径,不指定文件名,在导出时代码里去指定文件名。并且只需用户选择一次。

Richard.Ma 发表于 2023-4-17 17:31:34

你是要指定文件夹,然后根据sheet名称保存吧,那么你应该是首先获取文件夹名字,用FolderBrowserDialog。获取后再循环报错sheet

冬至 发表于 2023-4-17 18:35:23

嗯嗯,今天已经解决了,谢谢

Richard.Ma 发表于 2023-4-18 15:41:14

不客气
页: [1]
查看完整版本: 如何实现FpSpread导出多个Excel文件并由用户指定路径