C# 如何使用epplus从datagrid保存excel?
我使用按钮获取此事件,它返回到“System.ArgumentException:'列超出范围'” 你能帮我解决这个问题吗?C# 如何使用epplus从datagrid保存excel?,c#,epplus,C#,Epplus,我使用按钮获取此事件,它返回到“System.ArgumentException:'列超出范围'” 你能帮我解决这个问题吗? 非常感谢。我想这一定与您传递的数据表有关。您正在使用的数据是什么样子的 下面的示例使用ws.Cells[1,1]或ws.Cells[“A1”] 类程序 { 静态void Main(字符串[]参数) { ExcelPackage p=新的ExcelPackage(); 尝试 { p=新的ExcelPackage(); } 捕获(System.IO.iofex异常) { //
非常感谢。我想这一定与您传递的数据表有关。您正在使用的数据是什么样子的 下面的示例使用
ws.Cells[1,1]或ws.Cells[“A1”]
类程序
{
静态void Main(字符串[]参数)
{
ExcelPackage p=新的ExcelPackage();
尝试
{
p=新的ExcelPackage();
}
捕获(System.IO.iofex异常)
{
//文件已打开
Console.WriteLine(“文件打开时无法处理。请关闭文件并重试。”);
回来
}
捕获(System.IO.InvalidDataException)
{
//无效的文件类型
Console.WriteLine(“无效的文件类型。请重试。”);
回来
}
捕获(例外情况除外)
{
WriteLine(“未处理的异常。请与开发人员联系”);
回来
}
var wb=p.工作簿;
//创建表
DataTable dt=新的DataTable();
添加(新数据列(“Col1”));
添加(新数据列(“Col2”);
添加(新数据列(“Col3”);
添加(新数据列(“Col4”);
添加(新数据列(“Col5”);
//填表
数据行工作行;
对于(int i=0;i Datatable output?我写入一个数据网格并分配一个数据表。我只是尝试使用它,但我不知道它,因为我知道错误是由于列名不可用。我将单元格[“A1”]编辑为单元格[1,1]或仅为单元格。所有这些都会返回带有excel工作表ws=excel.工作簿.Worksheets.Add(“演示”)的结果;ws.Cells[“A1”].LoadFromDataTable(data,true);
您的想法是创建数据网格中的所有数据并将其填充到新的excel文件中吗?我希望代码能够做到这一点,而不是手工制作列和行。我的意见是保存数据网格(wpf)的数据将表格格式化为excel文件并选择其位置。是的,我的想法是创建数据并将其填充到新的excel文件中。我创建了datatable,以便提供一个示例。您只需将数据表传递到“LoadFromDataTable()”方法,而不是像我所做的那样创建一个。
void Export()
{
string filePath = "";
SaveFileDialog dialog = new SaveFileDialog();
dialog.Filter = "Excel | *.xlsx | Excel 2003 | *.xls";
if (dialog.ShowDialog() == true)
{
filePath = dialog.FileName;
}
if (string.IsNullOrEmpty(filePath))
{
MessageBox.Show("Link is not valid");
return;
}
DataTable dt = new DataTable();
dtgExcel.DataContext = dt;
using (ExcelPackage excel = new ExcelPackage())
{
var ws = excel.Workbook.Worksheets.Add("Sheet1");
ws.Cells[1,1].LoadFromDataTable(dt, true);
ws.Cells.AutoFitColumns();
using (ExcelRange objRange = ws.Cells["A1:XFD1"])
{
objRange.Style.Font.Bold = true;
objRange.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
objRange.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
objRange.Style.Fill.PatternType = ExcelFillStyle.Solid; objRange.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#B7DEE8"));
}
FileStream file = File.Create(filePath);
file.Close();
File.WriteAllBytes(filePath, excel.GetAsByteArray());
}
MessageBox.Show("It's successful!!");
}
class Program
{
static void Main(string[] args)
{
ExcelPackage p = new ExcelPackage();
try
{
p = new ExcelPackage();
}
catch (System.IO.IOException fex)
{
//file is open
Console.WriteLine("Can not process while file is open.Please close file and try again.");
return;
}
catch (System.IO.InvalidDataException lex)
{
//invalid file type
Console.WriteLine("Invalid File Type. Please Try Again.");
return;
}
catch (Exception ex)
{
Console.WriteLine("Unhandled Exception. Please Contact Developer.");
return;
}
var wb = p.Workbook;
//create table
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Col1"));
dt.Columns.Add(new DataColumn("Col2"));
dt.Columns.Add(new DataColumn("Col3"));
dt.Columns.Add(new DataColumn("Col4"));
dt.Columns.Add(new DataColumn("Col5"));
//fill table
DataRow workRow;
for (int i = 0; i <= 9; i++)
{
workRow = dt.NewRow();
workRow["Col1"] = string.Format("Row {0} Col 1", i);
workRow["Col2"] = string.Format("Row {0} Col 2", i);
workRow["Col3"] = string.Format("Row {0} Col 3", i);
workRow["Col4"] = string.Format("Row {0} Col 4", i);
workRow["Col5"] = string.Format("Row {0} Col 5", i);
dt.Rows.Add(workRow);
}
//create worksheet
var ws = wb.Worksheets.Add("Foo");
//load data into cell A1
ws.Cells["A1"].LoadFromDataTable(dt, true);
ws.Cells.AutoFitColumns();
using (ExcelRange objRange = ws.Cells["A1:XFD1"])
{
objRange.Style.Font.Bold = true;
objRange.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
objRange.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
objRange.Style.Fill.PatternType = ExcelFillStyle.Solid;
objRange.Style.Fill.BackgroundColor.SetColor(System.Drawing.ColorTranslator.FromHtml("#B7DEE8"));
}
p.SaveAs(new FileInfo(@"C:\FooFolder\Foo.xlsx"));
Console.WriteLine("It's Successful");
}
}