- 手动导出:通过直接操作数据库,将数据查询出来并整理成文件,这种方法适合偶尔需要导出,或者不熟悉编程的用户。
- 程序化导出:通过修改织梦的核心文件,添加一个自定义的导出按钮和功能,这种方法更自动化,适合需要频繁导出的用户。
下面我将详细介绍这两种方法,并提供详细的步骤和代码示例。

手动导出(通过数据库)
这是最直接、最简单的方法,不需要修改任何网站文件。
适用场景
- 偶尔需要导出数据。
- 网站服务器没有安装PHPExcel等扩展。
- 不想修改织梦核心文件。
操作步骤
第一步:登录数据库管理工具
登录你的网站空间数据库管理工具,最常用的是 phpMyAdmin。
第二步:找到并查询数据表
- 在左侧的数据库列表中,选择你的织梦网站数据库。
- 在中间的列表中,找到名为
dede_sysform的表(如果你的表前缀修改过,请使用你的前缀,如#@_sysform)。 - 点击“浏览”或“Select”来查看表中的所有数据。
- 点击“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;
第四步:导出查询结果
- 执行上述SQL语句。
- 在查询结果页面,找到“导出”或“Export”按钮。
- 在导出选项中:
- 格式:选择你想要的格式,CSV 是最推荐的,因为它可以被Excel完美打开,且是纯文本格式,不易出错,也可以选择Excel、SQL等。
- 编码:强烈建议选择 UTF-8,如果你的网站是UTF-8版本的话,这样可以避免中文乱码。
- 其他选项:保持默认即可。
- 点击“执行”或“Go”,浏览器就会开始下载导出的文件。
第五步:整理文档 下载下来的CSV文件可以直接用Excel打开,你可能需要:

- 调整列宽。
- 设置单元格格式(如将dtime列设置为日期时间格式)。
- 删除不需要的列。
程序化导出(修改织梦文件)
这种方法会在自定义表单的后台管理页面添加一个“导出Excel”按钮,点击后直接下载一个包含所有数据的Excel文件,非常方便。
适用场景
- 需要频繁导出数据。
- 希望有一个一键式的解决方案。
- 熟悉基本的文件修改操作。
准备工作
你需要一个可以生成Excel文件的PHP类库,最常用的是 PHPExcel,你需要先下载它。
-
下载PHPExcel: 访问 GitHub 上的 PHPExcel 项目页面:https://github.com/PHPOffice/PHPExcel 下载
PHPExcel文件夹,并将其上传到你的网站根目录下的/include/文件夹里,路径应该是/include/PHPExcel/。 -
修改织梦文件: 我们需要修改两个文件:
/dede/templets/list_sysform.htm(负责显示列表页面的HTML)/dede/sys_main.php(负责处理后台逻辑的PHP文件)
操作步骤
第一步:修改列表页面,添加导出按钮
-
打开文件
/dede/templets/list_sysform.htm。 -
找到页面顶部的操作按钮区域,通常在
<form>标签附近。 -
在“删除”按钮旁边,添加一个“导出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/目录下,或者直接使用文字按钮。
第二步:修改后台处理文件,实现导出逻辑
-
打开文件
/dede/sys_main.php。 -
在文件末尾,
?>标签之前,添加以下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; // 务必终止脚本 }
第三步:测试
- 保存并上传你修改过的两个文件。
- 登录织梦后台,进入“自定义表单”管理页面。
- 你应该能看到新添加的“导出Excel”按钮。
- 点击按钮,浏览器会自动开始下载一个名为“自定义表单数据_YYYYMMDDHHMMSS.xlsx”的Excel文件。
重要提示
- 字段匹配:在方法二的代码中,
$header数组和SELECT查询语句中的字段名 必须 与你数据库中dede_sysform表的arctext字段(存储表单数据的字段)里的实际字段名完全一致,你可以先通过方法一查看数据库内容来确认字段名。 - 安全:修改核心文件前,请务必备份原文件,以防出错。
- PHPExcel库:如果你的服务器环境较新,可以考虑使用更轻量级的
PhpSpreadsheet,它是PHPExcel的官方继任者,但配置方法类似,对于旧版织梦,PHPExcel兼容性更好。 - 文件路径:确保
PHPExcel文件夹放在正确的/include/目录下,require_once的路径正确。DEDEINC是织梦常量,指向/include/目录。
选择哪种方法取决于你的具体需求和技术能力,对于大多数用户来说,方法二提供了更优雅、更高效的长期解决方案。
