1

I'm trying to insert data from a datatable to an Excel file from my web application. At the press of a button a datatable is filled and it is inserted into an Excel file. The issue is that when the data is inserted correctly and i save the file and then close it, the data disappears. And it happens when the Excel document is closed.

this is my code:

public  bool ExportDataTableToExcel(DataTable dt, string filepath)
{

    Excel.Application oXL;
    Excel.Workbook oWB;
    Excel.Worksheet oSheet;
    Excel.Range oRange;

    try
    {
        // Start Excel and get Application object. 
        oXL = new Excel.Application();

        // Set some properties 
        oXL.Visible = true;
        oXL.DisplayAlerts = false;

        // Get a new workbook. 
        oWB = oXL.Workbooks.Add(Missing.Value);

        // Get the Active sheet 
        oSheet = (Excel.Worksheet)oWB.ActiveSheet;
        oSheet.Name = "Data";

        int rowCount = 1;
        foreach (DataRow dr in dt.Rows)
        {
            rowCount += 1;
            for (int i = 1; i < dt.Columns.Count + 1; i++)
            {
                // Add the header the first time through 
                if (rowCount == 2)
                {
                    oSheet.Cells[1, 1] = "CustID";
                    oSheet.Cells[1, 2] = "Alias";
                    oSheet.Cells[1, 3] = "AdrID";
                    oSheet.Cells[1, 4] = "Truck Delivery Days";
                    oSheet.Cells[1, 5] = "Truck Delivery Hours";
                    oSheet.Cells[1, 6] = "Truck Delivery Type";
                    oSheet.Cells[1, 7] = "Plane Delivery Days";
                    oSheet.Cells[1, 8] = "Plane Delivery Hours";
                    oSheet.Cells[1, 9] = "Plane Delivery Type";
                    oSheet.Cells[1, 10] = "Other Delivery Days";
                    oSheet.Cells[1, 11] = "Other Delivery Hours";
                    oSheet.Cells[1, 12] = "Other Delivery Type";
                    oSheet.Cells[1, 13] = "Distance to Dealer";
                }
                oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
            }
        }
        oRange = oSheet.Range[oSheet.Cells[1, 1],oSheet.Cells[rowCount, dt.Columns.Count]];
        oRange.EntireColumn.AutoFit();

        // Save the sheet and close 
        oSheet = null;
        oRange = null;
        oWB.SaveAs(filepath, Excel.XlFileFormat.xlWorkbookNormal,
            Missing.Value, Missing.Value, Missing.Value, Missing.Value,
            Excel.XlSaveAsAccessMode.xlExclusive,
            Missing.Value, Missing.Value, Missing.Value,
            Missing.Value, Missing.Value);
        oWB.Close(Missing.Value, Missing.Value, Missing.Value);
        oWB = null;
        oXL.Quit();
    }
    catch
    {
        throw;
    }
    finally
    {
        // Clean up 
        // NOTE: When in release mode, this does the trick 
        GC.WaitForPendingFinalizers();
        GC.Collect();
        GC.WaitForPendingFinalizers();
        GC.Collect();
    }

    return true;
} 

And the data disappears after this line is executed:

 oWB.Close(Missing.Value, Missing.Value, Missing.Value);

can anybody help me with this?

thanks

1

1 Answer 1

6

Interop is NOT supported in sever-scenarios (like ASP...) by MS.

There are many options to read/edit/create Excel files without Interop/installing Excel on the server:

MS provides the free OpenXML SDK V 2.0 - see http://msdn.microsoft.com/en-us/library/bb448854%28office.14%29.aspx (XLSX only)

This can read+write MS Office files (including Excel).

Another free option see http://www.codeproject.com/KB/office/OpenXML.aspx (XLSX only)

IF you need more like handling older Excel versions (like XLS, not only XLSX), rendering, creating PDFs, formulas etc. then there are different free and commercial libraries like ClosedXML (free, XLSX only), EPPlus (free, XLSX only), Aspose.Cells, SpreadsheetGear, LibXL and Flexcel etc.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.