내 DataGrid 정보를 .csv 또는 Excel 파일로 내보내려면 어떻게해야합니까? .NET Framework 4.0에서 Microsoft Visual Studio 2010을 사용하고 있습니다.DataGrid를 CSV 또는 Excel로 내보내기
답변
시도 (이것은 엑셀, PDF 및 Word 문서로 데이터를 내보낼 수있는 옵션이있다)에 대한 수출을 할 ReportViewer 컨트롤을 사용하는 것입니다 생각
private void btnexport_Click(object sender, RoutedEventArgs e)
{
ExportToExcel<Employee, Employees> s = new ExportToExcel<Employee, Employees>();
s.dataToPrint = (Employees)dgEmployee.ItemsSource;
s.GenerateReport();
}
/// <summary>
/// Class for generator of Excel file
/// </summary>
/// <typeparam name="T"></typeparam>
/// <typeparam name="U"></typeparam>
public class ExportToExcel<T, U>
where T : class
where U : List<T>
{
public List<T> dataToPrint;
// Excel object references.
private Excel.Application _excelApp = null;
private Excel.Workbooks _books = null;
private Excel._Workbook _book = null;
private Excel.Sheets _sheets = null;
private Excel._Worksheet _sheet = null;
private Excel.Range _range = null;
private Excel.Font _font = null;
// Optional argument variable
private object _optionalValue = Missing.Value;
/// <summary>
/// Generate report and sub functions
/// </summary>
public void GenerateReport()
{
try
{
if (dataToPrint != null)
{
if (dataToPrint.Count != 0)
{
Mouse.SetCursor(Cursors.Wait);
CreateExcelRef();
FillSheet();
OpenReport();
Mouse.SetCursor(Cursors.Arrow);
}
}
}
catch (Exception e)
{
MessageBox.Show("Error while generating Excel report");
}
finally
{
ReleaseObject(_sheet);
ReleaseObject(_sheets);
ReleaseObject(_book);
ReleaseObject(_books);
ReleaseObject(_excelApp);
}
}
/// <summary>
/// Make Microsoft Excel application visible
/// </summary>
private void OpenReport()
{
_excelApp.Visible = true;
}
/// <summary>
/// Populate the Excel sheet
/// </summary>
private void FillSheet()
{
object[] header = CreateHeader();
WriteData(header);
}
/// <summary>
/// Write data into the Excel sheet
/// </summary>
/// <param name="header"></param>
private void WriteData(object[] header)
{
object[,] objData = new object[dataToPrint.Count, header.Length];
for (int j = 0; j < dataToPrint.Count; j++)
{
var item = dataToPrint[j];
for (int i = 0; i < header.Length; i++)
{
var y = typeof(T).InvokeMember
(header[i].ToString(), BindingFlags.GetProperty, null, item, null);
objData[j, i] = (y == null) ? "" : y.ToString();
}
}
AddExcelRows("A2", dataToPrint.Count, header.Length, objData);
AutoFitColumns("A1", dataToPrint.Count + 1, header.Length);
}
/// <summary>
/// Method to make columns auto fit according to data
/// </summary>
/// <param name="startRange"></param>
/// <param name="rowCount"></param>
/// <param name="colCount"></param>
private void AutoFitColumns(string startRange, int rowCount, int colCount)
{
_range = _sheet.get_Range(startRange, _optionalValue);
_range = _range.get_Resize(rowCount, colCount);
_range.Columns.AutoFit();
}
/// <summary>
/// Create header from the properties
/// </summary>
/// <returns></returns>
private object[] CreateHeader()
{
PropertyInfo[] headerInfo = typeof(T).GetProperties();
// Create an array for the headers and add it to the
// worksheet starting at cell A1.
List<object> objHeaders = new List<object>();
for (int n = 0; n < headerInfo.Length; n++)
{
objHeaders.Add(headerInfo[n].Name);
}
var headerToAdd = objHeaders.ToArray();
AddExcelRows("A1", 1, headerToAdd.Length, headerToAdd);
SetHeaderStyle();
return headerToAdd;
}
/// <summary>
/// Set Header style as bold
/// </summary>
private void SetHeaderStyle()
{
_font = _range.Font;
_font.Bold = true;
}
/// <summary>
/// Method to add an excel rows
/// </summary>
/// <param name="startRange"></param>
/// <param name="rowCount"></param>
/// <param name="colCount"></param>
/// <param name="values"></param>
private void AddExcelRows
(string startRange, int rowCount, int colCount, object values)
{
_range = _sheet.get_Range(startRange, _optionalValue);
_range = _range.get_Resize(rowCount, colCount);
_range.set_Value(_optionalValue, values);
}
/// <summary>
/// Create Excel application parameters instances
/// </summary>
private void CreateExcelRef()
{
_excelApp = new Excel.Application();
_books = (Excel.Workbooks)_excelApp.Workbooks;
_book = (Excel._Workbook)(_books.Add(_optionalValue));
_sheets = (Excel.Sheets)_book.Worksheets;
_sheet = (Excel._Worksheet)(_sheets.get_Item(1));
}
/// <summary>
/// Release unused COM objects
/// </summary>
/// <param name="obj"></param>
private void ReleaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show(ex.Message.ToString());
}
finally
{
GC.Collect();
}
}
}
필자는 Employee를 나의 클래스 Mail 및 Employees 목록으로 바 꾸었습니다.
프로젝트에 Excel DLL이 포함되어 있습니까? 또한 Excel = Microsoft.Interop.Office.Excel; 네임 스페이스에. – JSJ
솔루션 탐색기 -> 참조 추가 -> Microsoft.Office.Interop.Excel에서 참조를 마우스 오른쪽 버튼으로 클릭 한 다음 intellisense가 Excel을 Microsoft.Office.Interop.Excel로 바꾸라고 제안했습니다. 0 오류가 발생했습니다 ... 지금 사용해보십시오. 편집 : 완벽하게 작동합니다! 정말 고마워!!! – Sakul
내가 가장 빠르고 옵션은 보고서를 작성하고 샘플 아래
그게 쉽지는 모르겠지만 보고서가 어떻게 작동하는지 모르겠습니다. 나에게 약간 혼란스럽게 보인다. – Sakul
보고서의 시각적 모양을 만들 수있는 마법사가 있으므로 매우 간단합니다. 그런 다음 reportViewer를 응용 프로그램에 추가하고 보고서를 할당하면됩니다. 다음은 http://msdn.microsoft.com/en-us/library/ms252067(v=vs.80).aspx – NDraskovic
Thx에 대한 답변이지만 도움이 될만한 Jodha 솔루션에 대한 링크입니다. – Sakul
datatable을 csv로 변환하는 다음 코드를 사용할 수 있습니다. 코드는 매우 유연하여 열 이름을 변경할 수 있고 열 수를 선택할 수 있습니다. 당신이
public class ExporFile
{
/// <summary>
/// Export to CSV
/// </summary>
/// <param name="exportTable">Export table</param>
/// <param name="showColumns">Columns needs to show in CSV</param>
/// <param name="changedColumnName">Changed Column Names in CSV</param>
/// <param name="fileName">File Name</param>
public static void ExportCSV(DataTable exportTable, string showColumns, string changedColumnName, string fileName)
{
DataTable filterTable = FilterColumn(exportTable, showColumns, changedColumnName);
string dataCSV = DataTable2CSV(filterTable, "\t", "\"");
dataCSV = System.Web.HttpContext.Current.Server.HtmlDecode(dataCSV);
System.Web.HttpContext.Current.Response.Charset = "";
System.Web.HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.Unicode;
System.Web.HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
System.Web.HttpContext.Current.Response.Write(dataCSV);
System.Web.HttpContext.Current.Response.Flush();
try
{
System.Web.HttpContext.Current.Response.End();
}
catch { };
}
/// <summary>
/// Filter Columns
/// </summary>
/// <param name="exportTable"></param>
/// <param name="showColumns"></param>
/// <param name="changedColumnName"></param>
/// <returns></returns>
private static DataTable FilterColumn(DataTable exportTable, string showColumns, string changedColumnName)
{
DataView filterDataView = exportTable.DefaultView;
//filterDataView.Sort = "AutoID";
DataTable filterTable = filterDataView.ToTable(false, showColumns.Split(','));
return ChangedExportDataColumnName(filterTable, changedColumnName);
}
/// <summary>
/// Changed Column Datatable
/// </summary>
/// <param name="filterTable"></param>
/// <param name="changedColumnName"></param>
/// <returns></returns>
private static DataTable ChangedExportDataColumnName(DataTable filterTable, string changedColumnName)
{
string[] changedNames = changedColumnName.Split(',');
for (int i = 0; i < changedNames.Length; i++)
{
if (!String.IsNullOrEmpty(changedNames[i]))
{
filterTable.Columns[i].ColumnName = changedNames[i];
}
}
return filterTable;
}
/// <summary>
/// Returns a CSV string corresponding to a datatable. However the separator can be defined and hence it can be any string separated value and not only csv.
/// </summary>
/// <param name="table">The Datatable</param>
/// <param name="separator">The value separator</param>
/// <param name="circumfix">The circumfix to be used to enclose values</param>
/// <returns></returns>
private static String DataTable2CSV(DataTable table, string separator, string circumfix)
{
StringBuilder builder = new StringBuilder(Convert.ToString((char)65279));
foreach (DataColumn col in table.Columns)
{
builder.Append(col.ColumnName).Append(separator);
}
builder.Remove((builder.Length - separator.Length), separator.Length);
builder.Append(Environment.NewLine);
foreach (DataRow row in table.Rows)
{
foreach (DataColumn col in table.Columns)
{
builder.Append(circumfix).Append(row[col.ColumnName].ToString().Replace("\"", "\"\"")).Append(circumfix).Append(separator);
}
builder.Remove((builder.Length - separator.Length), separator.Length);
builder.Append(Environment.NewLine);
}
return builder.ToString();
}
}
코드가 wpf가 아닌 webform 용으로 만들어졌습니다! –
- 1. 문제 DataGrid를 Excel로 내보내기
- 2. 자바 스크립트 또는 플래시로 CSV/Excel로 내보내기
- 3. DataGrid를 사용하지 않고 Excel로 데이터 테이블 내보내기
- 4. COM 개체를 사용하여 Silverlight Datagrid를 Excel로 내보내기
- 5. Sitebuilder를 Excel로 내보내기 | CSV | MySQL
- 6. yii를 사용하여 보고서를 csv/excel로 내보내기 향상시키기
- 7. Excel로 데이터 집합 내보내기
- 8. Joomla에서 Excel로 데이터 내보내기
- 9. XML로 내보내기 (Excel로 내보내기)
- 10. Excel로 내보내기
- 11. Excel로 내보내기
- 12. Excel로 내보내기
- 13. Excel로 IQueryable 컬렉션 내보내기
- 14. DataGrid를 Excel 문서로 내보내기
- 15. DataGrid를 PDF로 내보내기 C#
- 16. 보고서를 CSV/Excel로 내보내는 이유
- 17. wpf datagrid를 사용자 정의 Excel CSV 파일로 내보내기
- 18. oracle에서 Excel 또는 Excel로 결과 내보내기?
- 19. 테스트 결과를 Excel로 내보내기
- 20. Webmatrix에서 Excel로 데이터 내보내기
- 21. ASP.net MVC Excel로 내보내기
- 22. PHP에서 동적 테이블을 Excel로 내보내기
- 23. 셀 서식이있는 Silverlight Datagrid에서 Excel로 내보내기
- 24. HTML 표를 Excel로 내보내기 - 옵션?
- 25. 레코드 집합을 Excel로 내보내기
- 26. SSRS : Excel로 내보내기?
- 27. gridview에서 Excel로 내보내기
- 28. MVC의 Excel로 내보내기
- 29. MVC에서 Excel로 데이터 내보내기
- 30. 여러 보고서를 Excel로 내보내기
을 사용하는 것을 :
여기이
를 호출하는 데 필요한 코드는 다음과 같습니다 CSV로 내보내기합니다.? – JSJ