Member 12690943 Ответов: 3

Экспорт выбранных данных из сетки в шаблон excel на языке C#


У меня есть эта форма с кнопкой поиска, импорта и экспорта. Когда пользователь нажимает на поиск, в сетке отображаются записи из базы данных. Пользователь может выбрать одну или несколько записей, а затем нажать на кнопку экспорт, чтобы извлечь данные в файл excel, где я использовал crystal report. Но теперь требуется, чтобы данные были извлечены в тот же файл excel, который используется при импорте, который является шаблоном excel. Итак, что мне нужно сделать, так это когда пользователь экспортирует данные, он заполнит пустой шаблон excel выбранными данными.

Ниже приведен мой существующий код. Пожалуйста, помогите мне или дайте несколько советов, как это сделать.
Заранее спасибо.

EDIT: я изменил приведенный ниже код с помощью последнего кода, который я пробовал. Но что происходит, так это то, что он загружает файл excel без каких-либо данных внутри. Пожалуйста, помогите мне узнать почему. Спасибо!

Что я уже пробовал:

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();
        }

3 Ответов

Рейтинг:
2

Raghavendra78

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();
}


Vincent Maverick Durano

Это позволит экспортировать все строки gridview в файл. ОП хочет экспортировать только выбранную строку.

Raghavendra78

Взглянуть
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

Предоставленное вами решение не показывает, как экспортировать выбранную строку. Кроме того, вторая ссылка, которую вы предоставили, - это ссылка, которую я отправил в ОП. см. Решение 1.

Рейтинг:
1

Vincent Maverick Durano

Это может помочь: Экспорт выбранных строк GridView в файл Excel в ASP.Net[^]


Member 12690943

код в том, что я пробовал сейчас, экспортирует данные, но происходит то, что экспортируемые данные повторяются.

Vincent Maverick Durano

затем вам придется отлаживать свой код, чтобы понять, почему он повторяется. Если ваш источник данных содержит повторяющиеся данные, то вам, возможно, придется сначала отфильтровать их, прежде чем выполнять экспорт.

Рейтинг:
0

AnvilRanger

Я бы начал с использования компонента, который может помочь работать с форматом OpenXML для офисных документов.

EPPlus, EPPlus-создание расширенных электронных таблиц Excel на сервере-Главная страница[^]
Или
Open XML SDK, Добро пожаловать в Open XML SDK 2.5 для Office[^]
есть два компонента, которые хорошо работают. Я лично использую EPPlus в нескольких своих проектах.