整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

c#根据html模板导出excel

c#根据html模板导出excel

xcelHelper封装

public class ExcelHelper
{
    /// <summary>
    /// 根据html模板文件生成excel文件
    /// </summary>
    /// <param name="ds">数据源</param>
    /// <param name="TemplateFilePath">html模板文件路径(虚拟路径而非物理路径)</param>
    /// <param name="ToFileName">生成的excel文件名,带后缀不带路径</param>
    /// <returns></returns>
    public static string GetExcel(DataSet ds, string TemplateFilePath, string ToFileName)
    {
        string ToFilePath=SysHelper.GetVirtualPath() + "upload/export_excel/";
        string strOutPath=HttpContext.Current.Server.MapPath(ToFilePath);
        if (!Directory.Exists(strOutPath))
        {
            Directory.CreateDirectory(strOutPath);
        }

        string TemplateContent=GetStringFromTemplate(ds, TemplateFilePath);
        //保存文件
        using (FileStream fs=new FileStream(strOutPath + ToFileName, FileMode.Create))
        {
            using (StreamWriter sw=new StreamWriter(fs))
            {
                sw.Write(TemplateContent);
            }
        }
        return ToFilePath + ToFileName;
    }

    /// <summary>
    /// 根据模板生成字符换
    /// </summary>
    /// <param name="ds"></param>
    /// <param name="TemplateFilePath"></param>
    /// <returns></returns>
    private static string GetStringFromTemplate(DataSet ds, string TemplateFilePath)
    {
        //读取模板
        string TemplateContent="";
        using (StreamReader sr=new StreamReader(HttpContext.Current.Server.MapPath(TemplateFilePath)))
        {
            TemplateContent=sr.ReadToEnd();
        }
        
        //解析每个表
        for (int TableIndex=0; TableIndex < ds.Tables.Count; TableIndex++)
        {
            DataTable dt=ds.Tables[TableIndex];
            //获取表的模板集合
            string TableTag=string.Format(@"#table.{0}#", TableIndex);//表的标签
            string pattern=string.Format(@"#table\.{0}#.*?#table\.{0}#", TableIndex);
            Regex reg=new Regex(pattern, RegexOptions.Singleline);
            MatchCollection matchs=reg.Matches(TemplateContent);
            //解析每个模板
            foreach (Match match in matchs)
            {
                string tableTemplate=match.Value;
                string table="";//解析后内容
                                  //解析每行数据
                for (int i=0; i < dt.Rows.Count; i++)
                {
                    string rowTemplate=tableTemplate.Replace(TableTag, "");//去掉模板标签
                                                                             //解析行模板
                    for (int j=0; j < dt.Columns.Count; j++)
                    {
                        string ColumnName="#table." + TableIndex + "." + dt.Columns[j].ColumnName + "#";
                        rowTemplate=rowTemplate.Replace(ColumnName, dt.Rows[i][j].ToString());
                    }
                    table +=rowTemplate;
                }
                //解析完之后替换到模板
                TemplateContent=TemplateContent.Replace(tableTemplate, table);
            }
        }
        return TemplateContent;
    }
}

html模板格式

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
</head>
<body>
    <table border="1">
        <tr>
      <td colspan="4" style="text-align:center;">事件汇总表</td</tr>
        <tr>
            <td style="width:200px;">事件名称</td>
            <td style="width:500px;">事件简要情况</td>
            <td style="width:100px;">发生时间</td>
            <td style="width:100px;">发生地区</td>
        </tr>
        #table.0#
        <tr>
            <td>#table.0.omtb_title#</td>
            <td>#table.0.omtb_content#</td>
            <td>#table.0.omtb_date#</td>
            <td>#table.0.omtb_address#</td>
        </tr>
        #table.0#
    </table>
</body>
</html>


调用方式

string templatepath=SysHelper.GetVirtualPath() + "zfb/pro_list_excel.html",
outfile="事件汇总表" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xls";
string excel_file_path=ExcelHelper.GetExcel(dsSource, templatepath, outfile);

附加获取应用程序虚拟目录方法

pire.XLS for Java 13.3.6 已发布。本次更新支持将Excel转换为独立的HTML文件,支持了保存整个Excel到HTML流,支持了给透视表的透视域字段(PivotFields)和数据域字段(DataFields)添加条件格式,并且支持取代一个单元格内部分文本的功能。同时,该版本还Excel 到 PDF和图片的转换。此外,一些已知问题也得到了修复,如修复了转换图表到图片时引导线丢失的问题。详情请阅读以下内容。

新功能:

  • 支持了将Excel转换为独立的HTML文件。
Workbook wb=new Workbook();
wb.loadFromFile("data/mytest.xlsx");
HTMLOptions.Default.isStandAloneHtmlFile(true);
wb.saveToFile("result.html", FileFormat.HTML);
  • 支持了保存整个Excel到HTML流。
Workbook wb=new Workbook();
wb.loadFromFile("data/mytest.xlsx");
FileOutputStream fileStream=new FileOutputStream("output/saveStream_result.html");
wb.saveToStream(fileStream, FileFormat.HTML);
fileStream.close();
  • 支持了给透视表的透视域字段(PivotFields)和数据域字段(DataFields)添加条件格式。
PivotTable table=(PivotTable)worksheet.getPivotTables().get(0);
PivotConditionalFormatCollection pcfs=table.getPivotConditionalFormats();
PivotConditionalFormat pc=pcfs.addPivotConditionalFormat(table.getColumnFields().get(0));
//PivotConditionalFormat pc=pcfs.addPivotConditionalFormat(table.getRowFields().get(0));
//PivotConditionalFormat pc=pcfs.addPivotConditionalFormat(table.getDataFields().get(0));
//PivotConditionalFormat pc=pcfs.addPivotConditionalFormat(table.getPageFields().get(0));
IConditionalFormat cf=pc.addCondition();
cf.setFormatType(ConditionalFormatType.ContainsBlanks);
cf.setFillPattern(ExcelPatternType.Solid);
cf.setBackColor(Color.Red);
  • 支持了取代一个单元格内部分文本的功能。
sheet.getCellList().get(0).textPartReplace("Office", "Spire");

问题修复:

  • 修复了转换图表到图片时引导线丢失的问题。
  • 修复了转换Excel到图片时部分数据位置下移的问题。
  • 修复了转换Excel到图片时双下划线变单下划线的问题。
  • 修复了为Excel添加页脚时程序报错java.lang.NullPointerException的问题。
  • 修复了转换Excel到PDF时程序报错Invalid sectionId of Header Footer image 的问题。
  • 修复了转换Excel到图片时进度条中的进度颜色丢失的问题。
  • 修复了转换图表到图片时X轴数据偏移的问题。
  • 修复了转换Excel到PDF时内容不正确的问题。

下载Spire.XLS for Java 13.3.6请点击:

Spire.XLS for Java | 下载

ord、Excel、PPT是我们平时办公中经常用到的几款软件,它可以适应我们不同的日常需要,为我们提供高效便捷的操作体验。

但是,大部分人其实苦于文件格式的相互转化,不知道office软件的隐藏的操作技巧,也常因为没有掌握操作技巧而浪费了许多时间。

今天,小编就教大家如何实现Word、Excel、PPT文件之间格式的相互转化,无需下载其他软件,只需20秒,轻松完成文件格式的相互转化!


Excel转word

Excel转word只需要两步操作。

首先,我们将表格的内容复制下来,然后打开Word。

按下【Ctrl+Alt+V】,接着选择【Microsoft Excel工作表对象】,最后点击确定,表格就转换成Word了。

Excel转PPT

在将Excel转化为PPT的时候,我们既要将内容完整复制到PPT界面中,又不能影响Excel表格的原始格式。

首先,我们复制Excel表格并打开PPT文稿界面;

点击【开始】菜单下的【选择性粘贴】,选择【Mirosoft Excel工作表对象】,点击确定;

选择插入的表格,双击鼠标左键就可以进入编辑状态啦!你也可以根据自己的需要通过拖拉边框对插入的表格大小进行调整,以适应PPT演示文稿所容纳的界面。

Word转Excel

在将Word转化为Excel时,我们不能直接复制,而需要先将word改为网页格式,再转换成表格。

先打开word,然后文件—另存为—保存类型改为网页,即 Html。

接着新建表格,将保存好的网页文件拖拽到Excel中,最后选择只读即可完成转化。

Word转PPT

除了鼠标右键复制粘贴之外,办公中我们经常遇到的问题是,如何按照文档大纲将其分页转化到PPT界面。其实只需要简单几步就能完成。

首先打开word文档,然后点击【视图】菜单下的【大纲】分别将标题和正文内容设置为1级和2级内容。

设置好大纲后,点击右上角的【文件】→【选项】,在弹窗中选择【快速访问工具栏】,然后在右边找到【发送Microsoft PowerPoint】并将其添加到功能区中,如下图所示。

添加完成后,回到大纲界面,点击顶部的电脑图标,word会将文档发送到PPT中,这样word就变成PPT。

以上就是今天分享的内容了,其实Word、Excel、PPT之间的格式转化非常简单,只要简单几步,就能一键轻松转换。

欢迎大家在评论中与我们分享其他好用的电脑技巧。