C#(VS2017)
发现了一个小问题,主要是自己理解不清楚。
一、关于System.Web.Mvc.Controller.File
这个方法是可以生成excel的,但是似乎只能由于MVC框架中,我在控制台上使用这个方法是不能使用的。具体为:错误 CS1955 不可调用的成员“File”不能像方法一样使用。
我没有找到解决这个问题的办法。
二、NPOI的使用
前面是的我看的项目中使用的方法,之后发现不行(可能不是MVC的原因)。最后找了这个NPOI的方法。具体方法在:https://www.cnblogs.com/mqxs/p/3372333.html。
这个里面的方法的输出只要以xls结尾就可以了。如果没有路径则自己创立一个路径。简化代码如下:
static void Main(string[] args)
{
string fileName = @"E:\Ceshi0.xls";//自己定义文件,文件不在则自动创立文件
ExcelTest(fileName);
}
public static void ExcelTest(string path)
{
IWorkbook workbook = new HSSFWorkbook();//创建Workbook
workbook.CreateSheet("sheet1");//创建sheet
using (FileStream fs = File.Create(path))//path=mmm.xls;
{
ISheet sheet = workbook.GetSheetAt(0);//获取sheet
sheet.CreateRow(0).CreateCell(0).SetCellValue("ID");//创建第一行
sheet.GetRow(0).CreateCell(1).SetCellValue("ParentID");//第二列
sheet.GetRow(0).CreateCell(2).SetCellValue("Name");//第三列
sheet.GetRow(0).CreateCell(3).SetCellValue("Url");//第四列
using (XUEXIEntities ceshi = new XUEXIEntities())
{
//Menu menu = new Menu();
var ms = ceshi.Menus;
List<Menu> menu0 = ms.ToList();
for (int i = 1; i < menu0.Count(); i++)
{
sheet.CreateRow(i).CreateCell(0).SetCellValue(menu0[i-1].ID);//第一列第i]行
sheet.GetRow(i).CreateCell(1).SetCellValue(Convert.ToInt16(menu0[i - 1].ParentID));//第二行第i行
sheet.GetRow(i).CreateCell(2).SetCellValue(menu0[i - 1].Name);//第三行第i列
sheet.GetRow(i).CreateCell(3).SetCellValue(menu0[i - 1].Url);//第四行第i列
}
}
workbook.Write(fs);
}
此方法生成的excel的是97-03的。似乎(根据网上的)更改HSSF为XSSF即可生成xlsx,最多加上更改ICSharpCode就好了,xls2xlsx。好吧,其实不行。具体解决方式没有找到(懒得查,我不想查了,网上的东西除了github上的我就没发现多少是能把问题讲清楚的,都是脑测)。
三、EPPlus
这个方法比NPOI似乎好一点。具体借鉴网址:https://www.cnblogs.com/rumeng/p/3785748.html
代码就按这个上面的,没有问题。