Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用epplus创建.xlsm文件_C#_Excel_Razor_Epplus_Xlsm - Fatal编程技术网

C# 使用epplus创建.xlsm文件

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

我正试图让一个网站导出一个.xlsm文件,但我似乎找不到任何有帮助的东西。下面是一个简单的示例,我正在使用它来测试构建一个.xlsx文件(可以正常工作)

@使用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>