C# 使用epplus创建.xlsm文件
我正试图让一个网站导出一个.xlsm文件,但我似乎找不到任何有帮助的东西。下面是一个简单的示例,我正在使用它来测试构建一个.xlsx文件(可以正常工作)C# 使用epplus创建.xlsm文件,c#,excel,razor,epplus,xlsm,C#,Excel,Razor,Epplus,Xlsm,我正试图让一个网站导出一个.xlsm文件,但我似乎找不到任何有帮助的东西。下面是一个简单的示例,我正在使用它来测试构建一个.xlsx文件(可以正常工作) @使用OfficeOpenXml; @{ //将文件扩展名更改为xlsm以进行测试 字符串fileExtension=“xlsm”; ExcelPackage p=新的ExcelPackage(); p、 工作簿。工作表。添加(“工作表名称”); int LatestWorksheetNumber=p.Workbook.Worksheets.C
@使用OfficeOpenXml;
@{
//将文件扩展名更改为xlsm以进行测试
字符串fileExtension=“xlsm”;
ExcelPackage p=新的ExcelPackage();
p、 工作簿。工作表。添加(“工作表名称”);
int LatestWorksheetNumber=p.Workbook.Worksheets.Count;
Excel工作表ws=p.Workbook.Worksheets[最新工作表编号];
ws.Cells[1,1].Value=“Test”;
//生成文件
字节[]bin=p.GetAsByteArray();
字符串filename=“filename”;
尝试
{
//将该文件作为附件下载
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
字符串ContentType=“”;
如果(文件扩展名==“xlsx”)
{
ContentType=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”;
}
其他的
{
ContentType=“application/vnd.ms excel.sheet.macroEnabled.12”;
}
Response.GetType();
Response.ContentType=ContentType;
AddHeader(“内容处置”、“附件;文件名=“+filename+””+文件扩展名);
响应。二进制写入(bin);
Response.End();
创建的文件
}
捕获(例外e)
{
@e、 信息
}
}
将文件扩展名更改为.xlsm后,会生成该文件,但当我尝试在Excel中打开该文件时,会出现一个错误,表明扩展名不正确。我认为我唯一需要改变的是内容类型标题,但这显然不是问题所在。我还缺什么???任何指导都将不胜感激 Xiaoy312解决了这个问题!添加
p.Workbook.CreateVBAProject()代码>在字节[]bin=p.GetAsByteArray()之前代码>解决了我的问题!其他一切都保持不变,但Excel现在将实际打开文件!以下是我为所有有相同问题的人编写的最终代码:
@using OfficeOpenXml;
<html>
<body>
<div id="page-wrapper">
@{
// Change file extension to xlsm to test
string FileExtension = "xlsm";
ExcelPackage p = new ExcelPackage();
p.Workbook.Worksheets.Add("Worksheet Name");
int LatestWorksheetNumber = p.Workbook.Worksheets.Count;
ExcelWorksheet ws = p.Workbook.Worksheets[LatestWorksheetNumber];
ws.Cells[1, 1].Value = "Test";
p.Workbook.CreateVBAProject();
//Generate A File
Byte[] bin = p.GetAsByteArray();
string filename = "filename";
try
{
//Download the file as an attachment
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
string ContentType = "";
if (FileExtension == "xlsx")
{
ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
}
else
{
ContentType = "application/vnd.ms-excel.sheet.macroEnabled.12";
}
Response.GetType();
Response.ContentType = ContentType;
Response.AddHeader("content-disposition", "attachment; filename=" + filename + "." + FileExtension);
Response.BinaryWrite(bin);
Response.End();
<p>File Created</p>
}
catch (Exception e)
{
<p>@e.Message</p>
}
}
</div>
</body>
</html>
@使用OfficeOpenXml;
@{
//将文件扩展名更改为xlsm以进行测试
字符串FileExtension=“xlsm”;
ExcelPackage p=新的ExcelPackage();
p、 工作簿。工作表。添加(“工作表名称”);
int LatestWorksheetNumber=p.Workbook.Worksheets.Count;
Excel工作表ws=p.Workbook.Worksheets[最新工作表编号];
ws.Cells[1,1].Value=“Test”;
p、 Workbook.CreateVBAProject();
//生成文件
字节[]bin=p.GetAsByteArray();
字符串filename=“filename”;
尝试
{
//将该文件作为附件下载
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
字符串ContentType=“”;
如果(文件扩展名==“xlsx”)
{
ContentType=“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”;
}
其他的
{
ContentType=“application/vnd.ms excel.sheet.macroEnabled.12”;
}
Response.GetType();
Response.ContentType=ContentType;
AddHeader(“内容处置”、“附件;文件名=“+filename+””+文件扩展名);
响应。二进制写入(bin);
Response.End();
创建的文件
}
捕获(例外e)
{
@e、 信息
}
}
你看过了吗?也许你忘了用p.Workbook.createVBA项目创建VBA项目了。Dan,谢谢你的链接。我以前从未见过这个示例,我肯定会将其添加到书签中,以帮助解决未来的问题。不过,小Y312的建议解决了我的问题。谢谢你们两个!当我尝试下一行时,p.Workbook.CreateVBAProject();由于CreateVBAProject()的原因,代码返回错误
@using OfficeOpenXml;
<html>
<body>
<div id="page-wrapper">
@{
// Change file extension to xlsm to test
string FileExtension = "xlsm";
ExcelPackage p = new ExcelPackage();
p.Workbook.Worksheets.Add("Worksheet Name");
int LatestWorksheetNumber = p.Workbook.Worksheets.Count;
ExcelWorksheet ws = p.Workbook.Worksheets[LatestWorksheetNumber];
ws.Cells[1, 1].Value = "Test";
p.Workbook.CreateVBAProject();
//Generate A File
Byte[] bin = p.GetAsByteArray();
string filename = "filename";
try
{
//Download the file as an attachment
Response.Clear();
Response.ClearContent();
Response.ClearHeaders();
Response.Cookies.Clear();
string ContentType = "";
if (FileExtension == "xlsx")
{
ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
}
else
{
ContentType = "application/vnd.ms-excel.sheet.macroEnabled.12";
}
Response.GetType();
Response.ContentType = ContentType;
Response.AddHeader("content-disposition", "attachment; filename=" + filename + "." + FileExtension);
Response.BinaryWrite(bin);
Response.End();
<p>File Created</p>
}
catch (Exception e)
{
<p>@e.Message</p>
}
}
</div>
</body>
</html>