[英]Export Windows forms datagridview to excel power pivot table with C#
我有一個Windows窗體,該窗體通過一系列過濾器生成報告,並且可以將其導出為多種格式,其中一種是Excel,但是現在我們希望擁有預定義的Excel超級視圖模板,當我在運行時需要從Excel上的表中獲取數據。將我的數據導出到Excel,就像一個新數據一樣,但是我需要它清除並填充現有表,當用戶轉到超級視圖工作表時,他們可以看到動態表,地圖以及所有預定義的內容,以及他的新數據
我雖然將我的datagrid導出到XML文件,但是excel文件將有一個load事件,該事件將清除當前數據,並且它們將使用具有永久目錄的XML文件填充表
我想知道是否有更好的方法可以這樣做,因為我找不到任何解決方案,謝謝
OP:您的任務描述有點不清楚,並且缺少詳細信息,因此我給出了將DataGrid
內容導出到Microsoft Excel過程的以下示例:
public bool Export2Excel(DataTable dataTable)
{
object misValue = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Excel.Application _appExcel = null;
Microsoft.Office.Interop.Excel.Workbook _excelWorkbook = null;
Microsoft.Office.Interop.Excel.Worksheet _excelWorksheet = null;
try
{
if (dataTable.Rows.Count <= 0) { throw new ArgumentNullException("Table is Empty"); }
// excel app object
_appExcel = new Microsoft.Office.Interop.Excel.Application();
// excel workbook object added to app
_excelWorkbook = _appExcel.Workbooks.Add(misValue);
_excelWorksheet = _appExcel.ActiveWorkbook.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;
// column names row (range obj)
Microsoft.Office.Interop.Excel.Range _columnsNameRange;
_columnsNameRange = _excelWorksheet.get_Range("A1", misValue).get_Resize(1, dataTable.Columns.Count);
// column names array to be assigned to _columnNameRange
string[] _arrColumnNames = new string[dataTable.Columns.Count];
// set Excel columns NumberFormat property
// note; most important for decimal-currency, DateTime
for (int i = 0; i < dataTable.Columns.Count; i++)
{
// array of column names
_arrColumnNames[i] = dataTable.Columns[i].ColumnName;
string _strType = dataTable.Columns[i].DataType.FullName.ToString();
switch (_strType)
{
case "System.DateTime":
{
_excelWorksheet.Range["A1"].Offset[misValue, i].EntireColumn.NumberFormat = "MM/DD/YY";
break;
}
case "System.Decimal":
{
_excelWorksheet.Columns["A"].Offset[misValue, i].EntireColumn.NumberFormat = "$ #,###.00";
break;
}
case "System.Double":
{
_excelWorksheet.Columns["A"].Offset[misValue, i].EntireColumn.NumberFormat = "#.#";
break;
}
case "System.Int8":
case "System.Int16":
case "System.Int32":
case "System.Int64":
{
// use general format for int
//_excelWorksheet.Columns["A"].Offset[misValue, i].EntireColumn.NumberFormat = "####";
break;
}
default: break;
}
}
// assign array to column headers range, make 'em bold
_columnsNameRange.set_Value(misValue, _arrColumnNames);
_columnsNameRange.Font.Bold = true;
// populate data content row by row
for (int Idx = 0; Idx < dataTable.Rows.Count; Idx++)
{
_excelWorksheet.Range["A2"].Offset[Idx].Resize[1, dataTable.Columns.Count].Value =
dataTable.Rows[Idx].ItemArray;
}
// Autofit all Columns in the range
_columnsNameRange.Columns.EntireColumn.AutoFit();
// quit excel app process
if (_appExcel != null)
{
_appExcel.UserControl = false;
_appExcel.Quit();
}
return true;
}
catch { throw; }
finally
{
_excelWorksheet = null;
_excelWorkbook = null;
_appExcel = null;
misValue = null;
}
}
#endregion
}
您可以根據需要自定義它。
此外,您還可以看到DataGrid導出到MS Excel在實際的演示應用程序中如何工作(鏈接: http : //www.shopdigit.com/PaydayNY-2014P-Pro-for-Win-P14-2-02P.htm )。
希望這會有所幫助。 最好的祝福,
即時通訊使用由Windows表單生成的XML,鏈接到我的Excel表作為源
使用這種方法
public static void SerializeObject(this List<SPSR_ReporteSabanasxOrdenes_Todos_Result> list, string fileName)
{
var serializer = new XmlSerializer(typeof(List<SPSR_ReporteSabanasxOrdenes_Todos_Result>));
using (var stream = File.OpenWrite(fileName))
{
serializer.Serialize(stream, list);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.