找回密码
 立即注册

QQ登录

只需一步,快速开始

冬至

注册会员

2

主题

4

帖子

14

积分

注册会员

积分
14
  • 70

    金币

  • 2

    主题

  • 4

    帖子

最新发帖
冬至
注册会员   /  发表于:2023-4-15 11:22  /   查看:1383  /  回复:3
本帖最后由 冬至 于 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[0] = 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[0] = 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[0] = sh.Clone();
                        tempsp.SaveExcel(sh.SheetName + ".xlsx", FarPoint.Excel.ExcelSaveFlags.UseOOXMLFormat);
                        i++;
                    }
                }
            }

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

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

3 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-17 17:31:34
沙发
你是要指定文件夹,然后根据sheet名称保存吧,那么你应该是首先获取文件夹名字,用FolderBrowserDialog。获取后再循环报错sheet

回复 使用道具 举报
冬至
注册会员   /  发表于:2023-4-17 18:35:23
板凳
嗯嗯,今天已经解决了,谢谢
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2023-4-18 15:41:14
地板
不客气
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部