Экспорт DataTable в существующий Excel

Мне нужно открыть существующий файл Excel и заполнить его DataTable. Как я могу это сделать?

Я работаю в ASP.NET

Я уже пытался создать excel с этим решением (http://stackoverflow.com/questions/1746701/export-datatable-to-excel-file), а затем попытался открыть его с помощью соединения OLEDB, как это, но это не работало.. он сказал, что таблица была в неправильном формате.. и затем он сказал, что не может найти файл ISAM.. Я не знаю, что делать..

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\reports\report.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1""");

conn.Open();
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.Connection = conn;

cmd.CommandText = @"SELECT * INTO [Excel 8.0;Database=C:\reports\reportBase.xls].[SheetBase1] FROM Sheet1]";

cmd.ExecuteNonQuery();
conn.Close();

Пожалуйста помогите!! я в отчаянии!!

Спасибо!!


person Nicole    schedule 04.11.2011    source источник
comment
попробуйте следить за этой темой. stackoverflow.com/questions/1746701/ С уважением   -  person Carmelo La Monica    schedule 05.11.2011


Ответы (4)


если вас также интересуют сторонние библиотеки Excel .NET, вы можете открыть существующий файл Excel и заполнить его таблицей данных с Библиотека GemBox.Spreadsheet Excel C#/VB.NET.

Вот пример Excel ASP.NET, как открыть существующий файл Excel, заполнить его таблицей данных и передать в браузер:

DataTable people = (DataTable)Session["people"];

// Open excel file and insert data table.
ExcelFile ef = new ExcelFile();
ef.LoadXls(Server.MapPath("MyData.xls"));
ExcelWorksheet ws = ef.Worksheets[0];
ws.InsertDataTable(people, "A1", true);

Response.Clear();

// Stream file to browser, in required type.
switch (this.RadioButtonList1.SelectedValue)
{
    case "XLS":
        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("Content-Disposition", "attachment; filename=" +
             "Report.xls");
        ef.SaveXls(Response.OutputStream);
        break;

    case "XLSX":
        Response.ContentType = "application/vnd.openxmlformats";
        Response.AddHeader("Content-Disposition", "attachment; filename=" +
             "Report.xlsx");
        // With XLSX it is a bit more complicated as MS Packaging API
        // can't write directly to Response.OutputStream.
        // Therefore we use temporary MemoryStream.
        MemoryStream ms = new MemoryStream();
        ef.SaveXlsx(ms)
        ms.WriteTo(Response.OutputStream);
        break;
}
Response.End();
person GemBox Dev Team    schedule 07.11.2011

вы можете использовать это решение .... Только после того, как ваши данные будут помещены в таблицу данных....

 protected void Button1_Click(object sender, EventArgs e)
 {
     DataTable dtRecords = new DataTable();
     dtRecords.Columns.Add("FIRSTNAME");
     dtRecords.Columns.Add("LASTNAME");
     dtRecords.Columns.Add("JOB");
     DataRow rw1 = dtRecords.NewRow();
     rw1[0] = "JHON";
     rw1[1] = "SMITH";
     rw1[2] = "MANAGER";
     dtRecords.Rows.Add(rw1);
     DataRow rw2 = dtRecords.NewRow();
     rw2[0] = "MICH";
     rw2[1] = "KEN";
     rw2[2] = "SR MANAGER";
     dtRecords.Rows.Add(rw2);

     UploadDataTableToExcel(dtRecords);

}
protected void UploadDataTableToExcel(DataTable dtRecords)
{
        string XlsPath = Server.MapPath(@"~/Add_data/test.xls");
        string attachment = string.Empty;
        if (XlsPath.IndexOf("\\") != -1)
        {
            string[] strFileName = XlsPath.Split(new char[] { '\\' });
            attachment = "attachment; filename=" + strFileName[strFileName.Length - 1];
        }
        else
            attachment = "attachment; filename=" + XlsPath;
        try
        {
            Response.ClearContent();
            Response.AddHeader("content-disposition", attachment);
            Response.ContentType = "application/vnd.ms-excel";
            string tab = string.Empty;

            foreach (DataColumn datacol in dtRecords.Columns)
            {
                Response.Write(tab + datacol.ColumnName);
                tab = "\t";
            }
            Response.Write("\n");

            foreach (DataRow dr in dtRecords.Rows)
            {
                tab = "";
                for (int j = 0; j < dtRecords.Columns.Count; j++)
                {
                    Response.Write(tab + Convert.ToString(dr[j]));
                    tab = "\t";
                }

                Response.Write("\n");
            }
            Response.End();
        }
        catch (Exception ex)
        {
            //Response.Write(ex.Message);
        }
}
person Enigma State    schedule 04.11.2011
comment
это создает новый excel. Мне нужно написать ответ на существующий excel на моем диске. - person Nicole; 05.11.2011

если вас также интересуют сторонние библиотеки Excel .NET, вы можете открыть существующий файл Excel и заполнить его таблицей данных с библиотекой GemBox.Spreadsheet Excel C#/VB.NET.

В качестве альтернативы, если вы не хотите тратить 480 долларов США на лицензию, вы можете совершенно бесплатно скачать мой курс Экспорт в Excel по C#.

Он использует библиотеки OpenXML для создания реального файла Excel 2007, вам просто нужно указать имя файла и вызвать функцию «CreateExcelDocument».

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

Вы можете создать файл Excel из набора данных, таблицы данных или списка‹>.

Весь исходный код предоставляется абсолютно бесплатно на моей веб-странице вместе с инструкциями и демонстрационным проектом:

http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

Есть даже пример кода, показывающий, как создать файл Excel в приложении ASP.Net, а затем открыть его.

Удачи !

person Mike Gledhill    schedule 01.02.2013

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

это может тебе помочь..

 try
        {


            if (dt == null || dt.Columns.Count == 0)
            {
                throw new Exception("ExportToExcel: Null or empty input table!\n");
            }
            string Filepath = "E:Sample\\Form.xlsx";
            string SheetName = "Elnath - 3000";
           // Microsoft.Office.Interop.Excel.Application xlApp;
            Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
            Microsoft.Office.Interop.Excel._Worksheet xlWorkSheet;
           // Microsoft.Office.Interop.Excel.Range xlRange = null;
           object misValue = Type.Missing;

            Excel.Application xlApp = new Excel.Application();
           xlWorkBook = xlApp.Workbooks.Add(Filepath);

           // xlWorkBook = xlApp.Workbooks.Open(Filepath, misValue, false, misValue, misValue, misValue, true, misValue, misValue, misValue, misValue, misValue, false, misValue, misValue);
            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets[SheetName];

            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.ActiveSheet;

            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets.get_Item(SheetName);
            xlWorkSheet.Activate();
           // object StartRange = "B";
          //  object EndRange = misValue;

          //  xlRange = xlWorkSheet.get_Range("A", "M");
          //  xlRange = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.get_Range(StartRange, misValue);

            //Header
            //for (i = 0; i < dt.Columns.Count; i++)
            //{
            //    xlRange.Cells[1, i + 1] = dt.Columns[i].ColumnName;

            //}
            //Datas
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    xlApp.Cells[i + 13, j + 1] = dt.Rows[i][j].ToString();
                }
            }
            if (Filepath != null || Filepath != "")
            {
                try
                {
                    xlApp.ActiveWorkbook.SaveAs(Filepath);
                    xlApp.Quit();

                    xlWorkSheet = null;
                    xlWorkBook = null;
                    xlApp = null;
                }
                catch (Exception ex)
                {
                    throw new Exception("Can not save file" + ex.Message);
                }
            }
            else
            {
                xlApp.Visible = true;
            }
            return dt;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
person Prakash Khavasi    schedule 20.03.2017