在Windowsformsapplication中将gridview导出为ex​​cel

我需要代码将gridview导出到Windows窗体应用程序中的Excel …任何人都可以帮助使用该代码?

这是一个很长的答案,但在这里。

尝试在下面创建课程……

public class ExcelWriter : IDisposable { private XmlWriter _writer; public enum CellStyle { General, Number, Currency, DateTime, ShortDate }; public void WriteStartDocument() { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteProcessingInstruction("mso-application", "progid=\"Excel.Sheet\""); _writer.WriteStartElement("ss", "Workbook", "urn:schemas-microsoft-com:office:spreadsheet"); WriteExcelStyles(); } public void WriteEndDocument() { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteEndElement(); } private void WriteExcelStyleElement(CellStyle style) { _writer.WriteStartElement("Style", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteAttributeString("ID", "urn:schemas-microsoft-com:office:spreadsheet", style.ToString()); _writer.WriteEndElement(); } private void WriteExcelStyleElement(CellStyle style, string NumberFormat) { _writer.WriteStartElement("Style", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteAttributeString("ID", "urn:schemas-microsoft-com:office:spreadsheet", style.ToString()); _writer.WriteStartElement("NumberFormat", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteAttributeString("Format", "urn:schemas-microsoft-com:office:spreadsheet", NumberFormat); _writer.WriteEndElement(); _writer.WriteEndElement(); } private void WriteExcelStyles() { _writer.WriteStartElement("Styles", "urn:schemas-microsoft-com:office:spreadsheet"); WriteExcelStyleElement(CellStyle.General); WriteExcelStyleElement(CellStyle.Number, "General Number"); WriteExcelStyleElement(CellStyle.DateTime, "General Date"); WriteExcelStyleElement(CellStyle.Currency, "Currency"); WriteExcelStyleElement(CellStyle.ShortDate, "Short Date"); _writer.WriteEndElement(); } public void WriteStartWorksheet(string name) { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteStartElement("Worksheet", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteAttributeString("Name", "urn:schemas-microsoft-com:office:spreadsheet", name); _writer.WriteStartElement("Table", "urn:schemas-microsoft-com:office:spreadsheet"); } public void WriteEndWorksheet() { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteEndElement(); _writer.WriteEndElement(); } public ExcelWriter(string outputFileName) { XmlWriterSettings settings = new XmlWriterSettings(); settings.Indent = true; _writer = XmlWriter.Create(outputFileName, settings); } public void Close() { if (_writer == null) throw new NotSupportedException("Already closed."); _writer.Close(); _writer = null; } public void WriteExcelColumnDefinition(int columnWidth) { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteStartElement("Column", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteStartAttribute("Width", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteValue(columnWidth); _writer.WriteEndAttribute(); _writer.WriteEndElement(); } public void WriteExcelUnstyledCell(string value) { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteStartElement("Cell", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteStartElement("Data", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteAttributeString("Type", "urn:schemas-microsoft-com:office:spreadsheet", "String"); _writer.WriteValue(value); _writer.WriteEndElement(); _writer.WriteEndElement(); } public void WriteStartRow() { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteStartElement("Row", "urn:schemas-microsoft-com:office:spreadsheet"); } public void WriteEndRow() { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteEndElement(); } public void WriteExcelStyledCell(object value, CellStyle style) { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); _writer.WriteStartElement("Cell", "urn:schemas-microsoft-com:office:spreadsheet"); _writer.WriteAttributeString("StyleID", "urn:schemas-microsoft-com:office:spreadsheet", style.ToString()); _writer.WriteStartElement("Data", "urn:schemas-microsoft-com:office:spreadsheet"); switch (style) { case CellStyle.General: _writer.WriteAttributeString("Type", "urn:schemas-microsoft-com:office:spreadsheet", "String"); break; case CellStyle.Number: case CellStyle.Currency: _writer.WriteAttributeString("Type", "urn:schemas-microsoft-com:office:spreadsheet", "Number"); break; case CellStyle.ShortDate: case CellStyle.DateTime: _writer.WriteAttributeString("Type", "urn:schemas-microsoft-com:office:spreadsheet", "DateTime"); break; } _writer.WriteValue(value); // tag += String.Format("{1}\">{0:yyyy\\-MM\\-dd\\THH\\:mm\\:ss\\.fff}", value, _writer.WriteEndElement(); _writer.WriteEndElement(); } public void WriteExcelAutoStyledCell(object value) { if (_writer == null) throw new NotSupportedException("Cannot write after closing."); //write the  and  tags for something if (value is Int16 || value is Int32 || value is Int64 || value is SByte || value is UInt16 || value is UInt32 || value is UInt64 || value is Byte) { WriteExcelStyledCell(value, CellStyle.Number); } else if (value is Single || value is Double || value is Decimal) //we'll assume it's a currency { WriteExcelStyledCell(value, CellStyle.Currency); } else if (value is DateTime) { //check if there's no time information and use the appropriate style WriteExcelStyledCell(value, ((DateTime)value).TimeOfDay.CompareTo(new TimeSpan(0, 0, 0, 0, 0)) == 0 ? CellStyle.ShortDate : CellStyle.DateTime); } else { WriteExcelStyledCell(value, CellStyle.General); } } #region IDisposable Members public void Dispose() { if (_writer == null) return; _writer.Close(); _writer = null; } #endregion } 

然后在您的winform应用程序中创建以下function……

  public static void ExcelExport(DataTable data, String fileName, bool openAfter) { //export a DataTable to Excel DialogResult retry = DialogResult.Retry; OpenFileDialog openFileDialog = new OpenFileDialog(); while (retry == DialogResult.Retry) { try { using (ExcelWriter writer = new ExcelWriter(fileName)) { writer.WriteStartDocument(); // Write the worksheet contents writer.WriteStartWorksheet("Sheet1"); //Write header row writer.WriteStartRow(); foreach (DataColumn col in data.Columns) writer.WriteExcelUnstyledCell(col.Caption); writer.WriteEndRow(); //write data foreach (DataRow row in data.Rows) { writer.WriteStartRow(); foreach (object o in row.ItemArray) { if (Convert.IsDBNull(o)) { writer.WriteExcelUnstyledCell(String.Empty); } else { writer.WriteExcelAutoStyledCell(o); } } writer.WriteEndRow(); } // Close up the document writer.WriteEndWorksheet(); writer.WriteEndDocument(); writer.Close(); if (openAfter) { openFileDialog.FileName = fileName; //openFileDialog.ShowDialog(); openFileDialog.OpenFile(); } retry = DialogResult.Cancel; } } catch (Exception myException) { retry = MessageBox.Show(myException.Message, "Excel Export", MessageBoxButtons.RetryCancel, MessageBoxIcon.Asterisk); } } } 

最后,使用它从您想要的事件/方法尝试这个…

 ExcelExport('YourdDataTable',"NameOfYourFile.xml",true); 

看一下

在.NET 2.0中将DataGridView导出到Excel(C#代码)

根据@Refracted Paladin的回答,我发现的唯一错误是

 Xml type 'List of xdt:untypedAtomic' does not support a conversion from Clr type 'Guid' to Clr type 'String'. 

这是因为他的代码不检查GUID。 所以我修改了他的代码,以便你也可以检查我的答案。

 Type _Type = o.GetType(); if (_Type.Equals(typeof(System.Guid))) { string GuidValueStr = Convert.ToString(o); writer.WriteExcelAutoStyledCell((object)GuidValueStr); } 

我修改他的function后

 public static void ExcelExport(DataTable data, String fileName) { try { using (ExcelWriter_StackOverFlow writer = new ExcelWriter_StackOverFlow(fileName)) { writer.WriteStartDocument(); // Write the worksheet contents writer.WriteStartWorksheet("Sheet1"); //Write header row writer.WriteStartRow(); foreach (DataColumn col in data.Columns) writer.WriteExcelUnstyledCell(col.Caption); writer.WriteEndRow(); //write data foreach (DataRow row in data.Rows) { writer.WriteStartRow(); foreach (object o in row.ItemArray) { if (o.ToString().Length <= 0) { writer.WriteExcelAutoStyledCell(string.Empty); } else { Type _Type = o.GetType(); if (_Type.Equals(typeof(System.Guid))) { string GuidValueStr = Convert.ToString(o); writer.WriteExcelAutoStyledCell((object)GuidValueStr); continue; } writer.WriteExcelAutoStyledCell(o); } } writer.WriteEndRow(); } // Close up the document writer.WriteEndWorksheet(); writer.WriteEndDocument(); writer.Close(); } } catch (Exception myException) { throw myException; } }