在Asp.Net中将数据从数据库附加到Excel

我开发了一个应用程序,我必须从数据库插入数据到Excel,插入数据的大小是预定义的。

假设有20个城市的logging。 现在首先我只需要插入5条logging,然后在查看某条消息给用户后,下一条5条数据就会追加到同一个Excel文件中,等等。

以下是我的代码插入数据到Excel中,大小是在Web.Config文件中定义的。

Web.Config代码:

<appSettings> <add key="UserRecord" value="6"/> </appSettings> 

码:

 public void InsertRecordToExcel() { DAL ObjDal = new DAL(); string record = ConfigurationManager.AppSettings["UserRecord"]; try { int n = Convert.ToInt32(record); string filename = Server.MapPath("UserDataSheet"); string City = TxtCityName.Text; DataTable dt = new DataTable(); dt = ObjDal.GetData(City); while(dt.Rows.Count>0) { StringWriter writer = new StringWriter(); HtmlTextWriter htmlWriter = new HtmlTextWriter(writer); GridView gridView = new GridView(); DataTable dtn = new DataTable(); gridView.DataSource = dt.AsEnumerable().Take(n).CopyToDataTable(); gridView.AutoGenerateColumns = true; gridView.DataBind(); gridView.RenderControl(htmlWriter); htmlWriter.Close(); Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".xls"); Response.Charset = ""; Response.Write(writer.ToString()); Response.End(); LblMessage.Text = n + " " + "Record Added Successfully"; } } catch (Exception ex) { throw ex; } } 

将数据附加到Excel文件的过程是什么?

你可以用xmlwriter创buildexcel文件。 或者更舒适的方式是使用一个库。 ( 从C#创buildExcel(.XLS和.XLSX)文件 )

带库:

  void export_Click(object sender, EventArgs e){ byte[] data = File.ReadAllBytes("export.xls"); //The created excel file with the library, if the library supports getting the excel as a stream you can use the method below to stream it. string filename = "export.xls"; Response.Clear(); Response.ClearHeaders(); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename="+filename); Response.AddHeader("Content-Type", "application/Excel"); Response.ContentType = "application/vnd.xls"; Response.AddHeader("Content-Length", bytesInStream.Length.ToString()); Response.BinaryWrite(data); Response.End(); } 

用xml的方式:

  void export_Click(object sender, EventArgs e){ MemoryStream ms = ExportDataTableToWorksheet(ds, ds2, true); byte[] bytesInStream = ms.ToArray(); string filename = "export.xls"; Response.Clear(); Response.ClearHeaders(); Response.ClearContent(); Response.AddHeader("content-disposition", "attachment; filename="+filename); Response.AddHeader("Content-Type", "application/Excel"); Response.ContentType = "application/vnd.xls"; Response.AddHeader("Content-Length", bytesInStream.Length.ToString()); Response.BinaryWrite(bytesInStream); Response.End(); } public static MemoryStream ExportDataTableToWorksheet(DataSet ds) { MemoryStream ms = new MemoryStream(); XmlTextWriter writer = new XmlTextWriter(ms, Encoding.UTF8); writer.Formatting = Formatting.Indented; // <?xml version="1.0"?> writer.WriteStartDocument(); // <?mso-application progid="Excel.Sheet"?> writer.WriteProcessingInstruction("mso-application", "progid=\"Excel.Sheet\""); // <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet >" writer.WriteStartElement("Workbook", "urn:schemas-microsoft-com:office:spreadsheet"); // Namespace definitions writer.WriteAttributeString("xmlns", "o", null, "urn:schemas-microsoft-com:office:office"); writer.WriteAttributeString("xmlns", "x", null, "urn:schemas-microsoft-com:office:excel"); writer.WriteAttributeString("xmlns", "ss", null, "urn:schemas-microsoft-com:office:spreadsheet"); writer.WriteAttributeString("xmlns", "html", null, "http://www.w3.org/TR/REC-html40"); // <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"> writer.WriteStartElement("DocumentProperties", "urn:schemas-microsoft-com:office:office"); // Documentattributes Author, Date, Company writer.WriteElementString("Author", Environment.UserName); writer.WriteElementString("LastAuthor", Environment.UserName); writer.WriteElementString("Created", DateTime.Now.ToString("u") + "Z"); writer.WriteElementString("Company", "Unknown"); writer.WriteElementString("Version", "11.8122"); // </DocumentProperties> writer.WriteEndElement(); // <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> writer.WriteStartElement("ExcelWorkbook", "urn:schemas-microsoft-com:office:excel"); // Workbook-Preferences writer.WriteElementString("WindowHeight", "13170"); writer.WriteElementString("WindowWidth", "17580"); writer.WriteElementString("WindowTopX", "120"); writer.WriteElementString("WindowTopY", "60"); writer.WriteElementString("ProtectStructure", "False"); writer.WriteElementString("ProtectWindows", "False"); // </ExcelWorkbook> writer.WriteEndElement(); // <Styles> writer.WriteStartElement("Styles"); // <Style ss:ID="Default" ss:Name="Normal"> writer.WriteStartElement("Style"); writer.WriteAttributeString("ss", "ID", null, "Default"); writer.WriteAttributeString("ss", "Name", null, "Normal"); // <Alignment ss:Vertical="Bottom"/> writer.WriteStartElement("Alignment"); writer.WriteAttributeString("ss", "Vertical", null, "Bottom"); writer.WriteEndElement(); // Verbleibende Sytle-Eigenschaften leer schreiben writer.WriteElementString("Borders", null); writer.WriteElementString("Font", null); writer.WriteElementString("Interior", null); writer.WriteElementString("NumberFormat", null); writer.WriteElementString("Protection", null); // </Style> writer.WriteEndElement(); // </Styles> writer.WriteEndElement(); // <Worksheet ss:Name="xxx"> writer.WriteStartElement("Worksheet"); writer.WriteAttributeString("ss", "Name", null, "export"); // <Table ss:ExpandedColumnCount="2" ss:ExpandedRowCount="3" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="60"> writer.WriteStartElement("Table"); // setting the column count writer.WriteAttributeString("ss", "ExpandedColumnCount", null, "1"); else writer.WriteAttributeString("ss", "ExpandedRowCount", null, (ds.Tables[0].Rows.Count).ToString()); writer.WriteAttributeString("x", "FullColumns", null, "1"); writer.WriteAttributeString("x", "FullRows", null, "1"); writer.WriteAttributeString("ss", "DefaultColumnWidth", null, "100"); foreach (DataRow row in ds.Tables[0].Rows) { // <Row> writer.WriteStartElement("Row"); // Alle Zellen der aktuellen Zeile durchlaufen writeCell(writer, (string)row["name"]); // </Row> writer.WriteEndElement(); } // </Table> writer.WriteEndElement(); // <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel"> writer.WriteStartElement("WorksheetOptions", "urn:schemas-microsoft-com:office:excel"); // pagesetup writer.WriteStartElement("PageSetup"); writer.WriteStartElement("Header"); writer.WriteAttributeString("x", "Margin", null, "0.4921259845"); writer.WriteEndElement(); writer.WriteStartElement("Footer"); writer.WriteAttributeString("x", "Margin", null, "0.4921259845"); writer.WriteEndElement(); writer.WriteStartElement("PageMargins"); writer.WriteAttributeString("x", "Bottom", null, "0.984251969"); writer.WriteAttributeString("x", "Left", null, "0.78740157499999996"); writer.WriteAttributeString("x", "Right", null, "0.78740157499999996"); writer.WriteAttributeString("x", "Top", null, "0.984251969"); writer.WriteEndElement(); writer.WriteEndElement(); // <Selected/> writer.WriteElementString("Selected", null); // <Panes> writer.WriteStartElement("Panes"); // <Pane> writer.WriteStartElement("Pane"); // writer.WriteElementString("Number", "1"); writer.WriteElementString("ActiveRow", "1"); writer.WriteElementString("ActiveCol", "1"); // </Pane> writer.WriteEndElement(); // </Panes> writer.WriteEndElement(); // <ProtectObjects>False</ProtectObjects> writer.WriteElementString("ProtectObjects", "False"); // <ProtectScenarios>False</ProtectScenarios> writer.WriteElementString("ProtectScenarios", "False"); // </WorksheetOptions> writer.WriteEndElement(); // </Worksheet> writer.WriteEndElement(); // </Workbook> writer.WriteEndElement(); writer.Flush(); writer.Close(); return ms; } /// <summary> /// Removes control characters and other non-UTF-8 characters /// </summary> /// <param name="inString">The string to process</param> /// <returns>A string with no control characters or entities above 0x00FD</returns> public static string RemoveTroublesomeCharacters(string input) { var isValid = new Predicate<char>(value => (value >= 0x0020 && value <= 0xD7FF) || (value >= 0xE000 && value <= 0xFFFD) || value == 0x0009 || value == 0x000A || value == 0x000D); return new string(Array.FindAll(input.ToCharArray(), isValid)); } static void writeCell(XmlTextWriter writer, string value) { // <Cell> writer.WriteStartElement("Cell"); // <Data ss:Type="String">xxx</Data> writer.WriteStartElement("Data"); writer.WriteAttributeString("ss", "Type", null, "String"); // Zelleninhakt schreiben writer.WriteValue(value); // </Data> writer.WriteEndElement(); // </Cell> writer.WriteEndElement(); } 

“查看一些消息给用户后” – 这个消息是什么,你在哪里显示? 假设这个消息是在Web /桌面只是插入前5个logging到Excel中,维护Excel工作簿实例,显示消息,插入下一组数据到活动工作簿。

还有一个想法是玩数据表,只有当用户下载excel时,才会填充excel

如果你能解释显示信息的意义,这将是有帮助的