Asp.net打开XML下载.xlsx文件



我试图从网格提供。xlsx文件,我认为大部分艰苦的工作已经完成。我拿起一个模板文件,用数据填充它。

我在Response.WriteFile上得到一个错误'file not found' .

从示例(下面链接)的外观来看,这应该只是预期的文件名,但我认为这需要是文件的路径?因此,我需要将我的'myDoc'对象保存到服务器,然后在response . writefile中提供路径。

这似乎不是这个例子的意思。

我使用的代码是一个修改版本:http://technet.weblineindia.com/web/export-data-to-excel-using-openxml-sdk/

由于使用sharepoint存储模板文件,我只需要创建一个文件流,而不是提供文件的URL。

下面是我的代码:
        // Create cell reference array 
       string[] CellReferenceArray = new string[] { "A", "B", "C", "D", "E" };
        //Open your saved excel file that you have created using template file.
       using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(file.OpenBinaryStream(), true))
        {
            // Create reference of main Workbook part, which contains all reference.
            WorkbookPart objworkbook = myDoc.WorkbookPart;
            // Create style sheet object that will be used for applying styling.
            Stylesheet objstyleSheet = objworkbook.WorkbookStylesPart.Stylesheet;
            // pick up first worksheet
            WorksheetPart objworksheet = objworkbook.WorksheetParts.First();
            // will be used in end while creating sheet data
            string objorigninalSheetId = objworkbook.GetIdOfPart(objworksheet);
            WorksheetPart objreplacementPart = objworkbook.AddNewPart<WorksheetPart>();
            string objreplacementPartId = objworkbook.GetIdOfPart(objreplacementPart);
            // Create object reader to read from excel file.
            OpenXmlReader objreader = OpenXmlReader.Create(objworksheet);
            // create writer object to write in excel sheet.
            OpenXmlWriter objOpenXmwriter = OpenXmlWriter.Create(objreplacementPart);
            int i = 1;
            Row r = new Row();
            Cell c = new Cell();
            Columns col1 = new Columns();
            UInt32 index = 0;
            while (objreader.Read())
            {
                if (objreader.ElementType == typeof(SheetData))
                {
                    if (objreader.IsEndElement)
                        continue;
                    objOpenXmwriter.WriteStartElement(new SheetData());
                    objOpenXmwriter.WriteStartElement(r);
                    // Loop to insert header
                    foreach (DataColumn colHead in YoutdTName.Columns)
                    {
                        c = new Cell
                        {
                            DataType = CellValues.String,
                            CellReference = CellReferenceArray[i] + Convert.ToString(index)
                        };
                        CellValue v1 = new CellValue(colHead.ColumnName.ToString());
                        c.Append(v1);
                        objOpenXmwriter.WriteElement(c);
                        i += 1;
                    }
                    objOpenXmwriter.WriteEndElement();
                    index += 1;
                    //Loop to insert datatable row in excel 
                    foreach (DataRow dr in YoutdTName.Rows)
                    {
                        objOpenXmwriter.WriteStartElement(r);
                        i = 1;
                        foreach (DataColumn col in YoutdTName.Columns)
                        {
                            c = new Cell
                            {
                                DataType = CellValues.String,
                                CellReference = CellReferenceArray[i] + Convert.ToString(index)
                            };
                            CellValue v1 = new CellValue(dr[col].ToString());
                            c.AppendChild(v1);
                            objOpenXmwriter.WriteElement(c);
                            i += 1;
                        }
                        objOpenXmwriter.WriteEndElement();
                        index += 1;
                    }
                    objOpenXmwriter.WriteEndElement();
                }
            }
            //close all objects
            objreader.Close();
            objOpenXmwriter.Close();
            Sheet sheet = objworkbook.Workbook.Descendants<Sheet>().Where(s => s.Id.Value.Equals(objorigninalSheetId)).First();
            sheet.Id.Value = objreplacementPartId;
            objworkbook.DeletePart(objworksheet);

        }
       Response.AddHeader("Content-Disposition", "inline;filename=YourExcelfileName.xlxs");
       Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
       Response.WriteFile("YourExcelfileName.xlxs");
       Response.Flush();
       Response.End();
    }

使用HttpResponseBinaryWrite而不是从你的SpreadsheetDocument-instance中获取底层流。

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.binarywrite (v = vs.110) . aspx

最新更新