zoukankan      html  css  js  c++  java
  • org.in2bits.MyXls.XlsDocument 生成excel文件 ; 如果想读取模板再另外生成的话,试试 NPOI

    优点:不依赖Microsoft组件,在内存中操作excel,读写速度快。

      缺点:无法读取模板,只能生成新的excel (我亲自测试是在读取完模板后,不能保存,也不能另存,并且其他人说这个读取还会有问题,所以不推荐用这个来读取),格式不好控制, 最大不能超过 65535 行数据不支持 xlsx 格式的生成 (如果需要生成 大于 65535的数据,或者是 xlsx 的数据,请参考本文章结尾 )

     

    MyXls是用C#开源项目,可以应用于asp.net 或者 .net应用程序上。它根据微软公开的Excle文档格式文件(BIFF),以二进制格式直接生成excel文档,支持Excel versions 97 - 2007。目前MyXls已经实现了单元格(cell)的格式设置,包括文本颜色、文本大小、字体、单位格边框、底色、列宽、行高,合并单元格,多个sheet页等功能,MyXls里面的索引号是从1开始

     

          你可以在这里找到myxls项目:http://sourceforge.net/projects/myxls/

          需要注意的是,如果你想在asp.net中使用myxls,那么上面链接中的download并不适合你,因为那是针对silverlight的。你可以到这里下载asp.net版本的http://sourceforge.net/projects/myxls/files/MyXls/v0.6.3/

    下载完毕后,直接在项目中引用 dll 文件即可实现下面的例子

    测试例子

    List<string> excelTitle = new List<string>() { "学校名称", "老师用户数", "家长用户数", "用户总数", "家长下载数", "老师下载数", "下载合计" };
                XlsDocument xls = new XlsDocument();
                Worksheet sheet = xls.Workbook.Worksheets.Add("统计明细");
    
    
                //填充表头  
                for (int i = 0; i < excelTitle.Count; i++)
                {
                    sheet.Cells.Add(1, i + 1, excelTitle[i]);
                }
    
                //填充内容  
                for (int i = 0; i < list.Count; i++)
                {
                    //从第二行开始填充,并且填充第二行的每一列
                    sheet.Cells.Add(i + 2, 1, list[i].SchoolName);
                    sheet.Cells.Add(i + 2, 2, list[i].TeacheruserCount);
                    sheet.Cells.Add(i + 2, 3, list[i].Userjiazhangcount);
                    sheet.Cells.Add(i + 2, 4, list[i].Count);
                    sheet.Cells.Add(i + 2, 5, list[i].UserphonexiazaiCount);
                    sheet.Cells.Add(i + 2, 6, list[i].TeacherphonexiazaiCount);
                    sheet.Cells.Add(i + 2, 7, list[i].PhoneCount);
    
                }
    
    
                //保存  
                xls.FileName = string.Format("成都每周一获取数据_{0}.xls", DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss"));
                xls.Save();
    image

     

     

    坑爹货,这玩意不支持读取模板来生成新的excel文件…

    例如下面的例子,结果是失败告终

    我们也可以制作一个模板(模板里面已经设置好了 表格的标头和样式),然后在代码里面打开这个模板,只添加数据即可

    image

    image

     

     

    如果先尝试读取模板,然后另存为或者是保存的话,可以试试 NPOI 这个

     

    FileStream file = new FileStream(Server.MapPath("template/") + "a.xls", FileMode.Open, FileAccess.Read); 
            HSSFWorkbook hssfworkbook = new HSSFWorkbook(file);
            file.Close();
            ISheet sheet1 = hssfworkbook.GetSheet("Sheet1");
    
            if (sheet1.GetRow(23) == null)
            {
                sheet1.CreateRow(23);
            }
            if (sheet1.GetRow(23).GetCell(6) == null)
            {
                sheet1.GetRow(23).CreateCell(6);
            }
    
            sheet1.GetRow(23).GetCell(6).SetCellValue(300); 
    
            sheet1.ForceFormulaRecalculation = true;
            FileStream file2 = new FileStream(Server.MapPath("template/") + "ccc.xls", FileMode.Create, FileAccess.Write); 
            hssfworkbook.Write(file2); 
            file2.Close();

    如果一定要用 myxls 生成 大于 65535行的数据,一种方式是  超过这个行数,就生成第二个 sheet ,方法如下

    http://www.cnblogs.com/yxhblog/archive/2012/06/07/2539894.html

    或者使用 NPOI 生成 xlsx 格式的文档,就可以超过 65535行数据了

    NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式

  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/joeylee/p/3755605.html
Copyright © 2011-2022 走看看