Click here to Skip to main content
15,883,883 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have this form with search, import and export button. When user click on search and a grid will show records from database. User can select one or more records then click on the export button to extract the data to excel file where I used crystal report. But now the required is the data should be extracted to the same excel file used in importing which is the excel template. So what I need to do is when user export the data, it will populate the blank excel template with the selected data.

Below is my existing code. Please help me or give me some tips on how to do it.
Thank you in advance.

EDIT: I changed the code below with the latest code I tried. But what happens is it downloads the excel file without any data inside. Please help me know why. Thanks!

What I have tried:

C#
private void ExportListReport()
        {
            try
            {

                UpdateDataSelection();

                string pFileName = "LineList_" + DateTime.Now.ToString("yyyyMMddhhmmss") + ".xls";

                string pLists = string.Empty;
                string pJobCodeKey = string.Empty;

                string pCountryCode = string.Empty;
                string pWorkCategoryCode = string.Empty;
                string pCapacityCode = string.Empty;
                string pOperativeCountryCode = string.Empty;

                string pNameAbbr = string.Empty;
                string pAffiliates = string.Empty;

                pLists = string.Join(",", DataSelection);
                if (pLists == string.Empty)
                {
                    GetDatabaseFilter(out pLists, out pNameAbbr, out pJobCodeKey, out pCountryCode, out pOperativeCountryCode, out pWorkCategoryCode, out pAffiliates, out pCapacityCode);
                }

                string pGridFilter = (rgvSubcontractor.MasterTableView.FilterExpression == null ? string.Empty : rgvSubcontractor.MasterTableView.FilterExpression);
                string pSortString = "";
                if (rgvSubcontractor.MasterTableView.SortExpressions != null)
                {
                    pSortString = ((rgvSubcontractor.MasterTableView.SortExpressions.GetSortString() == null) || (rgvSubcontractor.MasterTableView.SortExpressions.GetSortString() == string.Empty) ? pSortString : rgvSubcontractor.MasterTableView.SortExpressions.GetSortString());
                }
                pSortString = (pSortString == string.Empty ? "COMPANY_NAME ASC" : pSortString + ", COMPANY_NAME ASC");

                DataTable pDTSubconOneLineList = mSubContractorBS.getRptSubContractorOneLineList(pSubConCodeLists, pNameAbbr, string.Empty, string.Empty, pJobCodeKey, pCountryCode, pOperativeCountryCode, pWorkCategoryCode, pAffiliates, pCapacityCode);
                DataView pDVSubconOneLineList = new DataView(pDTSubconOneLineList);
                if (pGridFilter != string.Empty)
                {
                    pDVSubconOneLineList.RowFilter = pGridFilter;
                }
                pDVSubconOneLineList.Sort = pSortString;
                pDTSubconOneLineList = pDVSubconOneLineList.ToTable();

                pDTSubconOneLineList.TableName = "USP_RPT_SUBCON_ONE_LINE_LIST";
                

                Process[] processList = Process.GetProcesses();
                

                string path = Server.MapPath("~") + "\\SIS\\Template\\Download\\Subcon_Profile_List_Import_Template.xlsx";
                //string targetPath = Convert.ToString(Session["App_Data_Path"]) + "EXPORT_OUTPUT";
                string targetPath = Convert.ToString(Server.MapPath("~")) + "EXPORT_OUTPUT";
                string destFile = System.IO.Path.Combine(targetPath, pFileName);

                if (!Directory.Exists(targetPath))
                {
                    Directory.CreateDirectory(targetPath);
                }

                File.Copy(path, destFile, true);

                object misValue = System.Reflection.Missing.Value;

                Excel.Application xlApp = new Excel.Application();
                Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(destFile, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);

                Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Sheets[1];
                xlWorkSheet.get_Range("A2", "AN" + xlWorkSheet.Rows.Count.ToString()).Clear();

                object[,] objData = null;

                int rowcount = pDTSubconOneLineList.Rows.Count;

                objData = new Object[pDTSubconOneLineList.Rows.Count, pDTSubconOneLineList.Columns.Count];

                for (int row = 0; row < pDTSubconOneLineList.Rows.Count; row++)
                {
                    for(int column= 0; column < pDTSubconOneLineList.Columns.Count; column++)
                    {
                        objData[row, column] = pDTSubconOneLineList.Rows[row][column].ToString();
                    }
                }

                ((Excel.Worksheet)xlWorkBook.Sheets[1]).Select(Type.Missing);

                xlWorkBook.Save();
                xlWorkBook.Close(true, misValue, misValue);
                xlApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet);
                xlWorkSheet = null;
                xlWorkBook = null;
                xlApp = null;
                GC.Collect();



                //ReportDataSource pRds = new ReportDataSource("USP_RPT_SUBCON_ONE_LINE_LIST", pDTSubconOneLineList);
                //Microsoft.Reporting.WebForms.ReportViewer pRptViewer = new Microsoft.Reporting.WebForms.ReportViewer();
                //pRptViewer.LocalReport.EnableHyperlinks = true;
                //pRptViewer.ProcessingMode = ProcessingMode.Local;
                //pRptViewer.LocalReport.ReportPath = Server.MapPath("~") + "\\SIS\\Report\\SubconOneLineList_RPT.rdlc";
                //pRptViewer.LocalReport.DataSources.Add(pRds);

                //Warning[] pWarningArrays;
                //string[] pStreamIDsArrays;
                string pMimeType = string.Empty;
                string pEncoding = string.Empty;
                string pExtension = string.Empty;

                //byte[] pExcelFileBytesArray = pRptViewer.LocalReport.Render("Excel", null, out pMimeType, out pEncoding, out pExtension, out pStreamIDsArrays, out pWarningArrays);
                Response.Buffer = true;
                Response.Clear();
                Response.AppendCookie(new HttpCookie("fileDownloadToken", hdDownLoadToken.Value));
                Response.ContentType = pMimeType;
                Response.AddHeader("content-disposition", "attachment; filename=" + pFileName);
                //Response.BinaryWrite(pExcelFileBytesArray);
                Response.Flush();
            }
            catch (Exception ex)
            {
                ErrorHelper.HandleError(ex);
            }
        }

        protected void btnExport_Click(object sender, EventArgs e)
        {
            ExportListReport();
        }
Posted
Updated 18-Aug-16 16:48pm
v3

 
Share this answer
 
Comments
Member 12690943 26-Aug-16 2:17am    
the code in what I have tried now exports the data but what happens is the data exported is repeating.
Vincent Maverick Durano 26-Aug-16 6:14am    
then you'll have to debug your code to figure out why it's repeating. If your datasource contains repeated data, then you may have to filter out that first before doing an export.
I would start with using a component that can help work with OpenXML format for Office documents.

EPPlus, EPPlus-Create advanced Excel spreadsheets on the server - Home[^]
Or
Open XML SDK, Welcome to the Open XML SDK 2.5 for Office[^]
are two components that work well. I personally use EPPlus in several of my project.
 
Share this answer
 
C#
public void GridviewToExcel()
{
 
    StringBuilder builder = new StringBuilder();
    string strFileName = "GridviewExcel_" + DateTime.Now.ToShortDateString() + ".csv";
    builder.Append("Name ,Education,Location" + Environment.NewLine);
    foreach (GridViewRow row in GridView1.Rows)
    {
        string name = row.Cells[0].Text;
        string education = row.Cells[1].Text;
        string location = row.Cells[2].Text;
        builder.Append(name + "," + education + "," + location + Environment.NewLine);
    }
    Response.Clear();
    Response.ContentType = "text/csv";
    Response.AddHeader("Content-Disposition", "attachment;filename=" + strFileName);
    Response.Write(builder.ToString());
    Response.End();
}
 
protected void Button1_Click1(object sender, EventArgs e)
{
    GridviewToExcel();
}
 
Share this answer
 
Comments
Vincent Maverick Durano 18-Aug-16 10:46am    
This would export all gridview rows to a file. The OP wants to export the selected row only.
Raghavendra78 19-Aug-16 3:18am    
Have a look
http://www.aspdotnet-suresh.com/2011/12/export-selected-gridview-rows-to-excel.html
http://www.aspsnippets.com/Articles/Export-selected-GridView-Rows-to-Excel-file-in-ASPNet.aspx
Vincent Maverick Durano 19-Aug-16 6:10am    
The solution you've provided does not show how to export the selected row. Also the second link you've provided is the reference that i've posted to the OP. see Solution 1.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900