【问题标题】:Error: The type or namespace name 'ExcelPackage' could not be found错误:找不到类型或命名空间名称“ExcelPackage”
【发布时间】:2012-12-11 12:00:03
【问题描述】:

当我按下带有以下代码的按钮时,我喜欢制作 excel 文件,但我有 2 个错误。

Error 1: The type or namespace name 'ExcelPackage' could not be found

Error 2: var ds = query.CopyToDataTable();

按钮点击事件代码如下:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;
using Microsoft.Office.Interop.Excel;
using Microsoft.Office.Core;
using System.Reflection;
using System.ComponentModel;
using System.Collections.Generic;
using System.Data.Linq;
using System.Data.SqlClient;
using System.Drawing;
using System.Text;


public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        var p = new ExcelPackage();
        var sheetName = "MyWorksheet";
        ExcelWorksheet ws = p.Workbook.Worksheets.Add(sheetName);


        ws.Cells.Style.Font.Size = 11; //Default font size for whole sheet
        ws.Cells.Style.Font.Name = "Calibri"; //Default Font name for whole sheet

        LinqBooksDataSet dataSet = new LinqBooksDataSet();
        FillDataSetUsingLinqToSql2(dataSet);

        // Query the DataTables
        var query =
         from publisher in dataSet.Publisher
        join book in dataSet.Book
        on publisher.ID equals book.Publisher
        select new
       {
    Publisher = publisher.Name,
    Book = book.Title
};

        var ds = query.CopyToDataTable();

        if (ds.Tables.Count > 0 && ds.Rows.Count > 0)
        {
            ws.Cells["A1"].LoadFromDataTable(ds, true);
            Response.BinaryWrite(p.GetAsByteArray());
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", "attachment;  filename=" + sheetName + ".xlsx");
        }

    }
    private static void FillDataSetUsingLinqToSql2(LinqBooksDataSet dataSet)
    {
        // Prepare the LINQ to SQL DataContext
        var linqBooks = new LinqBooksDataContext();

        // Query the Publisher table
        var publisherQuery =
          from publisher in linqBooks.Publishers
          select new { publisher.ID, publisher.Name };
        // Query the Book table
        var bookQuery =
          from book in linqBooks.Books
          where book.PubDate.Value.Year > 1950
          select new
          {
              book.ID,
              book.Title,
              book.Subject


          };

        // Execute the queries and load the data into the DataSet
        foreach (var publisher in publisherQuery)
        {
            dataSet.Publisher.AddPublisherRow(
            publisher.ID, publisher.Name, null, null);
        }
        foreach (var book in bookQuery)
        {
            dataSet.Book.AddBookRow(book.ID, book.Title, book.Subject);

        }
    }
}

【问题讨论】:

    标签: asp.net linq


    【解决方案1】:

    我假设您使用的是EPPLus。但是,您需要添加using OfficeOpenXml;

    using OfficeOpenXml;
    
    // ...
    
    
    using (var pck = new OfficeOpenXml.ExcelPackage())
    {
        using (var stream = File.OpenRead(path))
        {
            pck.Load(stream);
        }
        // ...
    }
    

    query.CopyToDataTable(); 的下一个异常是由于 CopyToDataTableIEnumerable<DataRow> 的扩展方法,但您的查询是 IEnumerable<anonymous type>。所以这根本行不通。您需要DataRows 才能从中创建新的DataTable

    如果您想将它与任何类型一起使用,您可以在我的其他答案中使用此处的方法:

    Why I can't use .CopyToDataTable in LINQ query?

    【讨论】:

    • 谢谢,是的,我使用 EPPLus。 var ds = query.CopyToDataTable(); 的问题是什么
    • @masoud:编辑了我的答案。
    • 错误 4 找不到类型或命名空间名称“OfficeOpenXml”...我需要做什么?
    • @chinna_82:下载EPPlus 并在您的项目中添加对它的引用。然后添加我在回答中提到的using-directive:using OfficeOpenXml;
    • 为了未来读者的利益,现在下载 EPPlus 的简单方法是在“工具”菜单上的“NuGet 包管理器”选项的“包管理器控制台”中输入Install-Package EPPlus
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2019-09-14
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多