【发布时间】:2016-09-06 18:05:41
【问题描述】:
我有一个从数据库中获取数据然后将其放入网格的函数。我使用以下代码:
ds = new DataSet();
SQL = "SELECT * " +
"FROM table ";
using (SqlConnection conn = new SqlConnection(Connect))
{
conn.Open();
adapter = new SqlDataAdapter(SQL, conn);
adapter.Fill(ds, "data");
}
dgvInvoiceData.DataSource = ds.Tables[0];
效果很好。有时用户可能希望将网格复制到 Excel。这对于小型结果集来说足够好。一旦它们超过 50 行,它就会迅速接近无法使用。我尝试将范围设置为数组,但每次都失败。
int cols = 0;
int rows;
_Application XL = new Microsoft.Office.Interop.Excel.Application();
_Workbook workbook = XL.Workbooks.Add(Type.Missing);
_Worksheet worksheet = null;
Range xlr;
XL.Visible = false;
worksheet = workbook.ActiveSheet;
worksheet.Name = sheetName;
xlr = worksheet.Range["A0:B02"];
xlr = worksheet.get_Range("A0:" + (char)(64 + cols) + rows.ToString());
xlr = worksheet.get_Range("A0:" + (char)(64 + cols) + rows.ToString(), Type.Missing);
worksheet.get_Range("A0:" + (char)(64 + cols) + rows.ToString(), Type.Missing).Value2 = dt;
有很多尝试尝试获取一个范围,然后为其设置一个数组或类似的东西。
我得到了一些无用的错误
AspireExcel.dll 中出现“System.Runtime.InteropServices.COMException”类型的未处理异常
如果有更好的方法将数据获取到网格中,我可以将数据源直接传递到 Excel 或其他东西,我会很好。
我不知道这是否相关,但查看this 我发现 Excel 变量的定义略有不同。当我尝试它时
using Microsoft.Office.Interop;
using Microsoft.Office.Interop.Excel;
Excel.Application XL = new Excel.Application();
我明白了
找不到类型或命名空间名称“Excel”(您是否缺少 using 指令或程序集引用?) Excel C:\Code\Excel\Excel\Transfer.cs 190 Active
我的参考文献可能有误吗?我有 Microsoft.Office.Core 和 Microsoft.Office.Interop.Excel
【问题讨论】:
-
看看EPPlus,它是一个非常简单的库,可以在不使用Interop的情况下创建Excel文件