C# 打开由NPOI创建的excel文件时出错

C# 打开由NPOI创建的excel文件时出错,c#,asp.net,asp.net-mvc-4,npoi,C#,Asp.net,Asp.net Mvc 4,Npoi,我正在使用NPOI将数据导出到excel。我强制将该文件作为用户的附件下载。当用户将文件保存在磁盘上并打开该文件时,它可以工作,但在尝试从“下载”对话框中选择“打开”选项时失败。请参阅下面的代码。不知道怎么了 var xssfworkbook = new XSSFWorkbook(); var sheet1 = xssfworkbook.CreateSheet("Sheet 1"); //make header row

我正在使用NPOI将数据导出到excel。我强制将该文件作为用户的附件下载。当用户将文件保存在磁盘上并打开该文件时,它可以工作,但在尝试从“下载”对话框中选择“打开”选项时失败。请参阅下面的代码。不知道怎么了

var xssfworkbook = new XSSFWorkbook();
            var sheet1 = xssfworkbook.CreateSheet("Sheet 1");

            //make  header row

            var row1 = sheet1.CreateRow(0);

            var cell0 = row1.CreateCell(0);
            cell0.SetCellValue("Firm Id");

            var cell1 = row1.CreateCell(1);
            cell1.SetCellValue("Account Number");

for (int i = 0; i < result.Count; i++)
            {
                var row = sheet1.CreateRow(i + 1);

                if (result[i].FeeAmount != null)
                {
                    var cellFirmID = row.CreateCell(0);
                    cellFirmID.SetCellValue(result[i].FirmID);
                }

                if (result[i].AccountNumber != null)
                {
                    var cellAccountNumber = row.CreateCell(1);
                    cellAccountNumber.SetCellValue(result[i].AccountNumber);
                }
}

System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "BESTINVEST_fee_rebate_loader_.xlsx"));
MemoryStream file = WriteToStream(xssfworkbook);
response.Clear();
response.BinaryWrite(file.ToArray());
response.End();





        private MemoryStream WriteToStream(XSSFWorkbook xssfworkbook)
        {
            MemoryStream file = new MemoryStream();
            xssfworkbook.Write(file);
            return file;
        }
var xssfworkbook=new xssfworkbook();
var sheet1=xssfworkbook.CreateSheet(“表1”);
//制作标题行
var row1=sheet1.CreateRow(0);
var cell0=row1.CreateCell(0);
cell0.SetCellValue(“公司Id”);
var cell1=row1.CreateCell(1);
cell1.设置CellValue(“账号”);
for(int i=0;i
我建议您确保单元格已解锁

我使用以下各项没有问题:

                var workbook = new XSSFWorkbook();
            var members = (obj as IEnumerable<MemberListViewModel>).ToDataSourceResult(request).Data;
            var sheet = workbook.CreateSheet(TempData["List"].ToString());
            var headerRow = sheet.CreateRow(0);

            headerRow.CreateCell(0).SetCellValue("Name");
            headerRow.CreateCell(1).SetCellValue("Degrees");
            headerRow.CreateCell(2).SetCellValue("Rank");
            headerRow.CreateCell(3).SetCellValue("Endowed Professorship");
            headerRow.CreateCell(4).SetCellValue("Department");
            headerRow.CreateCell(5).SetCellValue("Program");

            var font = workbook.CreateFont();
            font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
            XSSFCellStyle style = (XSSFCellStyle)workbook.CreateCellStyle();
            style.SetFont(font);
            style.FillPattern = NPOI.SS.UserModel.FillPattern.SolidForeground;
            style.FillForegroundColor = IndexedColors.Grey25Percent.Index;
            style.IsLocked = false;
            style.WrapText = true;

            for (int i = 0; i < 6; i++)
            {
                var colStyle = sheet.GetColumnStyle(i);
                colStyle.WrapText = !colStyle.WrapText;
                sheet.SetDefaultColumnStyle(i, colStyle);
                var cell = headerRow.Cells[i];
                cell.CellStyle = style;
            }
            headerRow.RowStyle = style;


            sheet.SetColumnWidth(0, 30 * 256);
            sheet.SetColumnWidth(1, 20 * 256);
            sheet.SetColumnWidth(2, 20 * 256);
            sheet.SetColumnWidth(3, 50 * 256);
            sheet.SetColumnWidth(4, 30 * 256);
            sheet.SetColumnWidth(5, 50 * 256);

            int rowNumber = 1;
            style = (XSSFCellStyle)workbook.CreateCellStyle();
            style.IsLocked = false;
            style.WrapText = true;
            foreach (MemberListViewModel member in members)
            {
                var row = sheet.CreateRow(rowNumber++);

                row.CreateCell(0).SetCellValue(member.FullName);
                row.CreateCell(1).SetCellValue(member.degrees);
                row.CreateCell(2).SetCellValue(member.rank);
                row.CreateCell(3).SetCellValue(member.endowed_professorship);
                row.CreateCell(4).SetCellValue(member.department);
                row.CreateCell(5).SetCellValue(member.program);
            }
            //var colStyle = sheet.GetColumnStyle(3);
            //colStyle.WrapText = !colStyle.WrapText;
            //sheet.SetDefaultColumnStyle(3, colStyle);

            workbook.Write(output);

            var fileName = String.Format(
                            "{0} {2} - {1}.xlsx",
                            DateTime.Now.ToString("yyyyMMdd-HHmmss"),
                            Utilities.getUsername(Utilities.GetCurrentUser()), TempData["List"]).Replace(":", "");
            var file = File(output.ToArray(), Utilities.ExcelFileContentType, fileName);

            var context = System.Web.HttpContext.Current;
            context.Response.Clear();
            context.Response.ClearContent();
            context.Response.ClearHeaders();
            context.Response.AddHeader("content-disposition", String.Format("inline;filename=\'{0}\'", fileName));
            context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            context.Response.ContentType = file.ContentType;
            context.Response.AddHeader("content-length", file.FileContents.Length.ToString());
            context.Response.BinaryWrite(buffer: file.FileContents.ToArray());
            context.Response.Flush();
            context.Response.End();
            output.Dispose();
var工作簿=新XSSF工作簿();
变量成员=(对象为IEnumerable).ToDataSourceResult(请求).Data;
var sheet=workbook.CreateSheet(TempData[“List”].ToString());
var headerRow=sheet.CreateRow(0);
headerRow.CreateCell(0.SetCellValue(“名称”);
headerRow.CreateCell(1.SetCellValue(“度”);
headerRow.CreateCell(2.SetCellValue(“秩”);
headerRow.CreateCell(3).SetCellValue(“授予的教授职位”);
headerRow.CreateCell(4.SetCellValue(“部门”);
headerRow.CreateCell(5.SetCellValue(“程序”);
var font=workbook.CreateFont();
font.Boldweight=(短)NPOI.SS.UserModel.fontboldwight.Bold;
XSSFCellStyle=(XSSFCellStyle)工作簿。CreateCellStyle();
style.SetFont(字体);
style.FillPattern=NPOI.SS.UserModel.FillPattern.solid前台;
style.FillForegroundColor=IndexedColors.grey25%.Index;
style.IsLocked=false;
style.WrapText=true;
对于(int i=0;i<6;i++)
{
var colStyle=sheet.GetColumnStyle(i);
colStyle.WrapText=!colStyle.WrapText;
sheet.SetDefaultColumnStyle(i,colStyle);
var单元=头错误单元[i];
cell.CellStyle=样式;
}
headerRow.RowStyle=样式;
页。设置柱宽(0,30*256);
页。设置柱宽(1,20*256);
页。设置柱宽(2,20*256);
页。设置柱宽(3,50*256);
页。设置柱宽(4,30*256);
页。设置柱宽(5,50*256);
int rowNumber=1;
style=(XSSFCellStyle)工作簿.CreateCellStyle();
style.IsLocked=false;
style.WrapText=true;
foreach(成员中的MemberListViewModel成员)
{
var row=sheet.CreateRow(rowNumber++);
row.CreateCell(0).SetCellValue(member.FullName);
row.CreateCell(1).SetCellValue(member.degrees);
row.CreateCell(2).SetCellValue(member.rank);
row.CreateCell(3)、SetCellValue(成员、教授);
row.CreateCell(4).SetCellValue(成员.部门);
row.CreateCell(5).SetCellValue(member.program);
}
//var colStyle=sheet.GetColumnStyle(3);
//colStyle.WrapText=!colStyle.WrapText;
//sheet.SetDefaultColumnStyle(3,colStyle);
工作簿。编写(输出);
var fileName=String.Format(
“{0}{2}-{1}.xlsx”,
DateTime.Now.ToString(“yyyyMMdd HHmmss”),
getUsername(Utilities.GetCurrentUser()),TempData[“List”]).Replace(“:”,”);
var file=file(output.ToArray(),Utilities.ExcelFileContentType,文件名);
var context=System.Web.HttpContext.Current;
context.Response.Clear();
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.AddHeader(“内容处置”,String.Format(“内联;文件名=\'{0}\'”,文件名));
context.Response.ContentEncoding=System.Text.Encoding.UTF8;
context.Response.ContentType=file.ContentType;
context.Response.AddHeader(“content-length”,file.FileContents.length.ToString());
context.Response.BinaryWrite(缓冲区:file.FileContents.ToArray());
context.Response.Flush();
context.Response.End();
output.Dispose();
这个问题来自“文化”。创建excel之前:

var culture=new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture=culture;
Thread.CurrentThread.CurrentUICulture=culture;

查看内容时,生成的文件是什么样子的?是空的吗?如果您将扩展名更改为.zip,然后尝试打开它,是否有内容?