要求
我需要在C#中创建一个Windows应用程序,其中输出是一个excel文件(xlsm),它是从xlsm格式的模板(包含宏)创建的。
在模板文件“IneTemplate.xlsm”中有一个隐藏的工作表“Data”。我必须从数据库中填入数据(没有列的标题,只有数据),并使用“保存文件”对话框进行保存。
到目前为止我做了什么?
我有一个按钮。在按钮单击中我写了这个。
using OfficeOpenXml;
using (var ms = new MemoryStream())
{
//Default filename for new excel
String newFileName = string.Concat("ExcelExport", '(',
DateTime.Now.ToString("dd-MM-yyyy h:mm:ss tt")
.Replace(':', '_')
.Replace('/', '-')
.Replace(' ', '_'), ')', ".xlsm");
FileInfo existingFile = new FileInfo(Environment.CurrentDirectory + @"\App_Data\IneTemplate.xlsm");
if (existingFile.Exists)
{
using (var MyExcel = new ExcelPackage(existingFile))
{
ExcelWorksheet worksheet = MyExcel.Workbook.Worksheets["Data"];
int tripCount = 1;
//I have few trip data in a checked list box which I need to fill in the first column (column "A")
foreach (object item in clbTrip.CheckedItems)
{
DropDown trip = (DropDown)item;
worksheet.Cells[tripCount, 1].Value = trip.Value;
tripCount++;
}
int stopcount = 2;
int rowCount = 1;
//I have to fill the remaining columns with stops from each Trip in each column.(stops from Trip1 in column "B", from Trip 2 in "C" and so on)
foreach (object item in clbTrip.CheckedItems)
{
DropDown trip = (DropDown)item;
//Get the stops in a Trip from database
DataSet dsStopNames = objTrip.GetStopNames(trip.Id);
foreach (DataRow row in dsStopNames.Tables[0].Rows)
{
worksheet.Cells[rowCount, stopcount].Value = Convert.ToString(row["StopAliasName"]);
rowCount++;
}
stopcount++;
rowCount = 1;
}
try
{
//Create a save file Dialog
SaveFileDialog saveFileDialogExcel = new SaveFileDialog();
saveFileDialogExcel.Filter = "Excel files (*.xlsm)|*.xlsm";
saveFileDialogExcel.Title = "Export Excel File To";
saveFileDialogExcel.FileName = newFileName;
if (saveFileDialogExcel.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
if (saveFileDialogExcel.FileName != "")
{
string path = saveFileDialogExcel.FileName;
MyExcel.SaveAs(ms);
File.WriteAllBytes(path, ms.ToArray());
}
}
}
catch (Exception)
{
MessageBox.Show("Exception Occured While Saving , Check Whether the file is open");
}
}
}
}
其他信息
问题
创建了一个文件。但是当我打开时,它的显示文件格式不正确或已损坏或其他东西。
还有其他方法可以达到这个目的吗? EPPlus能否处理xlsm文件?
请帮助。