织梦自定义表单如何导出文档?

99ANYc3cd6
预计阅读时长 27 分钟
位置: 首页 织梦建站 正文
  1. 手动导出:通过直接操作数据库,将数据查询出来并整理成文件,这种方法适合偶尔需要导出,或者不熟悉编程的用户。
  2. 程序化导出:通过修改织梦的核心文件,添加一个自定义的导出按钮和功能,这种方法更自动化,适合需要频繁导出的用户。

下面我将详细介绍这两种方法,并提供详细的步骤和代码示例。

织梦自定义表单导出文档
(图片来源网络,侵删)

手动导出(通过数据库)

这是最直接、最简单的方法,不需要修改任何网站文件。

适用场景

  • 偶尔需要导出数据。
  • 网站服务器没有安装PHPExcel等扩展。
  • 不想修改织梦核心文件。

操作步骤

第一步:登录数据库管理工具 登录你的网站空间数据库管理工具,最常用的是 phpMyAdmin

第二步:找到并查询数据表

  1. 在左侧的数据库列表中,选择你的织梦网站数据库。
  2. 在中间的列表中,找到名为 dede_sysform 的表(如果你的表前缀修改过,请使用你的前缀,如 #@_sysform)。
  3. 点击“浏览”或“Select”来查看表中的所有数据。
  4. 点击“SQL”选项卡,进入SQL查询界面。

第三步:编写SQL查询语句 在SQL输入框中,输入查询语句,为了只导出有用的数据,建议使用 SELECT 语句指定你需要的字段。

织梦自定义表单导出文档
(图片来源网络,侵删)

假设你的自定义表单包含以下字段:

  • id (主键,自增)
  • typeid (栏目ID)
  • dtime (提交时间)
  • ip (IP地址)
  • uname (姓名)
  • tel (电话)
  • email (邮箱)
  • content (留言内容)

你可以使用以下SQL语句来查询所有数据,并按提交时间倒序排列:

SELECT id, dtime, ip, uname, tel, email, content FROM dede_sysform ORDER BY dtime DESC;

第四步:导出查询结果

  1. 执行上述SQL语句。
  2. 在查询结果页面,找到“导出”或“Export”按钮。
  3. 在导出选项中:
    • 格式:选择你想要的格式,CSV 是最推荐的,因为它可以被Excel完美打开,且是纯文本格式,不易出错,也可以选择Excel、SQL等。
    • 编码:强烈建议选择 UTF-8,如果你的网站是UTF-8版本的话,这样可以避免中文乱码。
    • 其他选项:保持默认即可。
  4. 点击“执行”或“Go”,浏览器就会开始下载导出的文件。

第五步:整理文档 下载下来的CSV文件可以直接用Excel打开,你可能需要:

织梦自定义表单导出文档
(图片来源网络,侵删)
  • 调整列宽。
  • 设置单元格格式(如将dtime列设置为日期时间格式)。
  • 删除不需要的列。

程序化导出(修改织梦文件)

这种方法会在自定义表单的后台管理页面添加一个“导出Excel”按钮,点击后直接下载一个包含所有数据的Excel文件,非常方便。

适用场景

  • 需要频繁导出数据。
  • 希望有一个一键式的解决方案。
  • 熟悉基本的文件修改操作。

准备工作

你需要一个可以生成Excel文件的PHP类库,最常用的是 PHPExcel,你需要先下载它。

  1. 下载PHPExcel: 访问 GitHub 上的 PHPExcel 项目页面:https://github.com/PHPOffice/PHPExcel 下载 PHPExcel 文件夹,并将其上传到你的网站根目录下的 /include/ 文件夹里,路径应该是 /include/PHPExcel/

  2. 修改织梦文件: 我们需要修改两个文件:

    • /dede/templets/list_sysform.htm (负责显示列表页面的HTML)
    • /dede/sys_main.php (负责处理后台逻辑的PHP文件)

操作步骤

第一步:修改列表页面,添加导出按钮

  1. 打开文件 /dede/templets/list_sysform.htm

  2. 找到页面顶部的操作按钮区域,通常在 <form> 标签附近。

  3. 在“删除”按钮旁边,添加一个“导出Excel”的按钮。

    <!-- 在类似这样的代码块中添加按钮 -->
    <td width="260">
        <table cellpadding="0" cellspacing="1" border="0">
            <tr>
                <td width="32"><a href="javascript:;" onclick="CheckAll(this);"><img src="images/all.gif" width="46" height="16" border="0" /></a></td>
                <td width="40"><a href="javascript:;" onclick="submitArc(0,1);"><img src="images/del.gif" width="46" height="16" border="0" /></a></td>
                <!-- 在这里添加我们的导出按钮 -->
                <td width="60"><a href="sys_main.php?dopost=exportExcel" target="_blank"><img src="images/excel.gif" width="46" height="16" border="0" title="导出为Excel" /></a></td>
            </tr>
        </table>
    </td>
    • href="sys_main.php?dopost=exportExcel":这是我们指向处理导出逻辑的链接。
    • target="_blank":建议在新标签页中打开,避免在当前页面跳转。
    • src="images/excel.gif":你需要准备一个excel.gif图标,并放到/dede/images/目录下,或者直接使用文字按钮。

第二步:修改后台处理文件,实现导出逻辑

  1. 打开文件 /dede/sys_main.php

  2. 在文件末尾,?> 标签之前,添加以下PHP代码:

    // 导出自定义表单数据为Excel
    else if($dopost == 'exportExcel')
    {
        // 引入PHPExcel库
        require_once(DEDEINC . '/PHPExcel.php');
        require_once(DEDEINC . '/PHPExcel/Writer/Excel2007.php');
        // 创建新的PHPExcel对象
        $objPHPExcel = new PHPExcel();
        $objPHPExcel->getProperties()->setCreator("DedeCMS")
                                     ->setLastModifiedBy("DedeCMS")
                                     ->setTitle("自定义表单数据导出")
                                     ->setSubject("自定义表单数据导出")
                                     ->setDescription("从DedeCMS后台导出的自定义表单数据")
                                     ->setKeywords("织梦, 自定义表单")
                                     ->setCategory("Result file");
        // 设置活动sheet的索引
        $objPHPExcel->setActiveSheetIndex(0);
        // 获取活动sheet
        $objSheet = $objPHPExcel->getActiveSheet();
        // 设置sheet名称
        $objSheet->setTitle('表单数据');
        // 定义表头
        // !!! 重要:请根据你的实际表单字段进行修改 !!!
        $header = array(
            'A' => 'ID',
            'B' => '提交时间',
            'C' => 'IP地址',
            'D' => '姓名',
            'E' => '电话',
            'F' => '邮箱',
            'G' => '留言内容'
        );
        // 设置表头样式
        $objSheet->getStyle('A1:G1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID)->getStartColor()->setARGB('FF666666');
        $objSheet->getStyle('A1:G1')->getFont()->getColor()->setARGB('FFFFFFFF');
        $objSheet->getStyle('A1:G1')->getFont()->setBold(true);
        // 将表头写入sheet
        foreach ($header as $key => $value) {
            $objSheet->setCellValue($key . '1', $value);
        }
        // 从数据库查询数据
        // !!! 重要:请根据你的实际表单字段修改查询语句中的字段名 !!!
        $dsql->SetQuery("SELECT id, dtime, ip, uname, tel, email, content FROM `#@__sysform` ORDER BY id ASC");
        $dsql->Execute('export');
        $row = 2; // 数据从第2行开始写入
        while ($arr = $dsql->GetArray('export')) {
            $objSheet->setCellValue('A' . $row, $arr['id']);
            $objSheet->setCellValue('B' . $row, date('Y-m-d H:i:s', $arr['dtime']));
            $objSheet->setCellValue('C' . $row, $arr['ip']);
            $objSheet->setCellValue('D' . $row, $arr['uname']);
            $objSheet->setCellValue('E' . $row, $arr['tel']);
            $objSheet->setCellValue('F' . $row, $arr['email']);
            // 对于可能包含长文本或换行的内容,使用setCellValueExplicit并设置类型为字符串
            $objSheet->setCellValueExplicit('G' . $row, $arr['content'], PHPExcel_Cell_DataType::TYPE_STRING);
            $row++;
        }
        // 设置列宽自动调整
        foreach (range('A', 'G') as $columnID) {
            $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
        }
        // 创建Excel2007写入对象
        $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
        // 设置HTTP头,告诉浏览器这是一个要下载的文件
        header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
        header('Content-Disposition: attachment;filename="自定义表单数据_' . date('YmdHis') . '.xlsx"');
        header('Cache-Control: max-age=0');
        // 将Excel文件输出到浏览器
        $objWriter->save('php://output');
        exit; // 务必终止脚本
    }

第三步:测试

  1. 保存并上传你修改过的两个文件。
  2. 登录织梦后台,进入“自定义表单”管理页面。
  3. 你应该能看到新添加的“导出Excel”按钮。
  4. 点击按钮,浏览器会自动开始下载一个名为“自定义表单数据_YYYYMMDDHHMMSS.xlsx”的Excel文件。

重要提示

  • 字段匹配:在方法二的代码中,$header 数组和 SELECT 查询语句中的字段名 必须 与你数据库中 dede_sysform 表的 arctext 字段(存储表单数据的字段)里的实际字段名完全一致,你可以先通过方法一查看数据库内容来确认字段名。
  • 安全:修改核心文件前,请务必备份原文件,以防出错。
  • PHPExcel库:如果你的服务器环境较新,可以考虑使用更轻量级的 PhpSpreadsheet,它是PHPExcel的官方继任者,但配置方法类似,对于旧版织梦,PHPExcel兼容性更好。
  • 文件路径:确保 PHPExcel 文件夹放在正确的 /include/ 目录下,require_once 的路径正确。DEDEINC 是织梦常量,指向 /include/ 目录。

选择哪种方法取决于你的具体需求和技术能力,对于大多数用户来说,方法二提供了更优雅、更高效的长期解决方案。

-- 展开阅读全文 --
头像
dede主导航如何用limit限制显示数量?
« 上一篇 01-05
织梦dede list标签如何灵活调用数据?
下一篇 » 01-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]