簡體   English   中英

使用C#將Windows窗體datagridview導出到Excel Power Pivot表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM