EPPlus 库,另存为
EPPlus Library, save as
使用EPPlus,很容易将文档保存到预定义的路径,但我每次都需要保存到不同的路径,所以我需要EPPlus来显示标准的保存对话框。
我的代码可以从数据表创建一个 Excel 文件,稍微格式化一下,然后将其保存在指定位置:
DirectoryInfo outputDir = new DirectoryInfo(@"C:\Users\user001\Downloads");
FileInfo newFile = new FileInfo(outputDir.FullName + @"\Crit.xlsx");
if (newFile.Exists) {newFile.Delete();}
using (ExcelPackage pck = new ExcelPackage(newFile))
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Crit");
ws.Cells["A1"].LoadFromDataTable(dtCrit, true);
ws.Cells.AutoFitColumns(0);
ws.Cells["A1:Z1"].Style.Border.Top.Style = ExcelBorderStyle.Thin;
ws.Cells["A1:Z1"].Style.Font.Bold = true;
pck.Save();
}
如何显示对话框以手动选择目标文件夹?
我试过pck.SaveAs,但我不能让它工作,而且关于这个的信息不多...
更新:
该应用程序在从项目内部或服务器执行时工作。如果使用 shourcut 或 copy/pasting exe 到我的桌面执行会崩溃。
string mydocpath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
try {
DirectoryInfo outputDir = new DirectoryInfo(mydocpath);
FileInfo newFile = new FileInfo(outputDir.FullName + @"\Requerimientos_" + DateTime.Now.ToString("dd-MM-yyyy_hh-mm") + ".xlsx");
if (newFile.Exists) { newFile.Delete(); }
using (ExcelPackage pck = new ExcelPackage(newFile))
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Requerimientos");
ws.Cells["A1"].LoadFromDataTable(dtReque, true);
ws.Cells.AutoFitColumns(0);
ws.Cells["A1:Z1"].Style.Border.Top.Style = ExcelBorderStyle.Thin;
ws.Cells["A1:Z1"].Style.Font.Bold = true;
var dlg = new SaveFileDialog { FileName = "Requerimientos_" + DateTime.Now.ToString("dd-MM-yyyy_hh-mm"), DefaultExt = ".xlsx", Filter = "Excel Sheet (.xlsx)|*.xlsx", InitialDirectory = mydocpath };
var result = dlg.ShowDialog();
if (result == true)
{
using (var stream = dlg.OpenFile())
{
pck.SaveAs(stream);
OpenDialog("File Created", "Export");
}
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
尝试使用 SaveFileDialog
:
private static bool? saveExcelPackageDialog(string fileName, string workingDirectory, byte[] rawBinaryObject)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = EXCEL_FILTER_FILE_DIALOG;
sfd.InitialDirectory = workingDirectory;
sfd.FileName = fileName;
bool? result = sfd.ShowDialog();
if (result == true)
{
File.WriteAllBytes(sfd.FileName, rawBinaryObject);
System.Diagnostics.Process.Start(sfd.FileName);
}
return result;
}
你必须这样使用它:
saveExcelPackageDialog(newFile.FullName, outputDir.FullName, pkg.GetAsByteArray());
WPF 通过 Microsoft.Win32
命名空间提供标准文件对话框。您可以使用 SaveFileDialog 来显示一个对话框和 select 或者创建一个文件来保存。
一旦你 select 编辑了一个文件,你就可以从路径创建一个 FileInfo 并将其传递给 SaveAs
,例如:
// Configure save file dialog box
var dlg = new Microsoft.Win32.SaveFileDialog
{
FileName = "NewSheet", // Default file name
DefaultExt = ".xlsx", // Default file extension
Filter = "Excel Sheet (.xlsx)|*.xlsx" // Filter files by extension
}
// Show save file dialog box
var result = dlg.ShowDialog();
// Process save file dialog box results
if (result == true)
{
// Save document
string filename = new FileInfo(dlg.FileName);
package.SaveAs(newFile);
}
或者您可以使用 SaveFileDialog.OpenStream 让对话框本身创建一个流以保存到:
if (result == true)
{
// Save document
using(var stream=dlg.OpenStream())
{
package.SaveAs(stream);
}
}
使用EPPlus,很容易将文档保存到预定义的路径,但我每次都需要保存到不同的路径,所以我需要EPPlus来显示标准的保存对话框。
我的代码可以从数据表创建一个 Excel 文件,稍微格式化一下,然后将其保存在指定位置:
DirectoryInfo outputDir = new DirectoryInfo(@"C:\Users\user001\Downloads");
FileInfo newFile = new FileInfo(outputDir.FullName + @"\Crit.xlsx");
if (newFile.Exists) {newFile.Delete();}
using (ExcelPackage pck = new ExcelPackage(newFile))
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Crit");
ws.Cells["A1"].LoadFromDataTable(dtCrit, true);
ws.Cells.AutoFitColumns(0);
ws.Cells["A1:Z1"].Style.Border.Top.Style = ExcelBorderStyle.Thin;
ws.Cells["A1:Z1"].Style.Font.Bold = true;
pck.Save();
}
如何显示对话框以手动选择目标文件夹? 我试过pck.SaveAs,但我不能让它工作,而且关于这个的信息不多...
更新: 该应用程序在从项目内部或服务器执行时工作。如果使用 shourcut 或 copy/pasting exe 到我的桌面执行会崩溃。
string mydocpath = System.Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
try {
DirectoryInfo outputDir = new DirectoryInfo(mydocpath);
FileInfo newFile = new FileInfo(outputDir.FullName + @"\Requerimientos_" + DateTime.Now.ToString("dd-MM-yyyy_hh-mm") + ".xlsx");
if (newFile.Exists) { newFile.Delete(); }
using (ExcelPackage pck = new ExcelPackage(newFile))
{
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Requerimientos");
ws.Cells["A1"].LoadFromDataTable(dtReque, true);
ws.Cells.AutoFitColumns(0);
ws.Cells["A1:Z1"].Style.Border.Top.Style = ExcelBorderStyle.Thin;
ws.Cells["A1:Z1"].Style.Font.Bold = true;
var dlg = new SaveFileDialog { FileName = "Requerimientos_" + DateTime.Now.ToString("dd-MM-yyyy_hh-mm"), DefaultExt = ".xlsx", Filter = "Excel Sheet (.xlsx)|*.xlsx", InitialDirectory = mydocpath };
var result = dlg.ShowDialog();
if (result == true)
{
using (var stream = dlg.OpenFile())
{
pck.SaveAs(stream);
OpenDialog("File Created", "Export");
}
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
尝试使用 SaveFileDialog
:
private static bool? saveExcelPackageDialog(string fileName, string workingDirectory, byte[] rawBinaryObject)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = EXCEL_FILTER_FILE_DIALOG;
sfd.InitialDirectory = workingDirectory;
sfd.FileName = fileName;
bool? result = sfd.ShowDialog();
if (result == true)
{
File.WriteAllBytes(sfd.FileName, rawBinaryObject);
System.Diagnostics.Process.Start(sfd.FileName);
}
return result;
}
你必须这样使用它:
saveExcelPackageDialog(newFile.FullName, outputDir.FullName, pkg.GetAsByteArray());
WPF 通过 Microsoft.Win32
命名空间提供标准文件对话框。您可以使用 SaveFileDialog 来显示一个对话框和 select 或者创建一个文件来保存。
一旦你 select 编辑了一个文件,你就可以从路径创建一个 FileInfo 并将其传递给 SaveAs
,例如:
// Configure save file dialog box
var dlg = new Microsoft.Win32.SaveFileDialog
{
FileName = "NewSheet", // Default file name
DefaultExt = ".xlsx", // Default file extension
Filter = "Excel Sheet (.xlsx)|*.xlsx" // Filter files by extension
}
// Show save file dialog box
var result = dlg.ShowDialog();
// Process save file dialog box results
if (result == true)
{
// Save document
string filename = new FileInfo(dlg.FileName);
package.SaveAs(newFile);
}
或者您可以使用 SaveFileDialog.OpenStream 让对话框本身创建一个流以保存到:
if (result == true)
{
// Save document
using(var stream=dlg.OpenStream())
{
package.SaveAs(stream);
}
}