本帖最后由 冬至 于 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++;
}
}
}
保存不会成功。用户选择时需要指定文件名,一旦导出时文件名不一致,就不会导出成功
所以我想问,有没有一种方式,可以让用户提前并且只选择路径,不指定文件名,在导出时代码里去指定文件名。并且只需用户选择一次。
|
|