DedeCMS本身没有内置这样的功能,所以我们需要通过“二次开发”来实现。 这通常意味着需要编写一个小的PHP脚本,这个脚本会读取Excel文件,然后将里面的数据填充到DedeCMS的文章发布流程中。

(图片来源网络,侵删)
下面我将为你提供两种实现方案:
- 【推荐】使用现成的第三方插件/工具:最快、最简单的方法。
- 【进阶】自己动手开发脚本:更灵活,能完全自定义。
使用现成的第三方插件/工具 (最简单快捷)
这是最适合大多数用户的方法,无需懂代码,下载安装即可使用。
步骤 1:寻找合适的工具
在DedeCMS的官方论坛、插件库或者第三方资源网站(如织梦吧、源码爱好者等)搜索关键词:
DedeCMS Excel批量发布织梦文章批量导入DedeCMS 批量添加文章
步骤 2:下载并安装
- 下载工具:找到一个评价好、下载量高的工具包,通常是一个ZIP压缩文件。
- 上传文件:解压压缩包,根据说明将文件(通常是PHP文件)上传到你的DedeCMS网站根目录下的指定文件夹(如
dede/或include/或新建的excel_import/文件夹)。 - 设置权限:确保你上传的文件夹以及DedeCMS的数据表(
dede_archives,dede_arctype等)有写入权限,通常需要将data目录和uploads目录的权限设置为755或777(注意:777有安全风险,操作后记得改回)。 - 访问页面:在浏览器中访问你上传的脚本页面,
http://你的网站.com/dede/excel_import.php。
步骤 3:准备Excel表格
这是最关键的一步,你的Excel表格必须按照工具要求的格式来准备,否则会导入失败。

(图片来源网络,侵删)
一个标准的Excel表格应该包含以下列(列名可以自定义,但内容必须对应):
| 栏目ID | 作者 | 来源 | tags (标签) | 摘要 | 缩略图 | 发布时间 | ||
|---|---|---|---|---|---|---|---|---|
| 5 | 我的文章标题1 | 张三 | 本站 | 旅游,美食,攻略 | 这是一篇文章的摘要... | (这里是文章的正文内容,可以使用HTML标签) | /uploads/img1.jpg | 2025-10-27 10:00:00 |
| 6 | 我的文章标题2 | 李四 | 转载 | 科技,AI,互联网 | 另一篇文章的摘要... | (这里是文章的正文内容) | /uploads/img2.jpg | 2025-10-27 11:00:00 |
重要说明:
- 栏目ID:这是必须的!你需要提前在DedeCMS后台“栏目管理”中查好你要发布文章的栏目ID,并填入Excel,如果不确定,可以登录后台查看。
- 文章正文可以直接写纯文本,也可以包含HTML代码,
<p>段落标签、<img>图片标签等。 - 缩略图:填写图片的完整路径,
/uploads/2025/10/27/a.jpg,确保图片已经上传到服务器。 - 发布时间:格式通常是
YYYY-MM-DD HH:MM:SS。 - 保存格式:将Excel文件另存为 *`.CSV (逗号分隔)(.csv)`** 格式,这是大多数脚本读取的标准格式。
步骤 4:执行导入
- 在网页工具中,选择你准备好的CSV文件。
- 点击“上传”或“导入”按钮。
- 脚本会开始读取文件并逐条插入数据库,完成后会显示导入成功或失败的信息。
- 前往你的DedeCMS后台“内容管理”->“文档列表”,检查文章是否已成功发布。
自己动手开发脚本 (更灵活)
如果你有一定的PHP基础,或者找不到满意的第三方工具,可以自己动手写一个。
核心思路:
- 创建一个前端上传页面 (
upload_excel.php)。 - 创建一个后端处理脚本 (
process_excel.php)。 - 使用PHPExcel库(或其替代品 PhpSpreadsheet)来解析Excel文件。
- 解析数据后,调用DedeCMS的底层函数来模拟文章发布。
详细步骤:
第1步:准备PHPExcel库
- 从 GitHub 下载
PhpSpreadsheet库。 - 将下载的
vendor文件夹和src文件夹(或者直接是PhpSpreadsheet文件夹)上传到你网站的某个目录,dede/PHPExcel/。
第2步:创建上传页面 (upload_excel.php)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">DedeCMS Excel批量发布</title>
</head>
<body>
<h1>请选择Excel文件进行批量发布</h1>
<form action="process_excel.php" method="post" enctype="multipart/form-data">
<input type="file" name="excel_file" accept=".xlsx, .xls, .csv" required>
<button type="submit">开始导入</button>
</form>
</body>
</html>
第3步:创建处理脚本 (process_excel.php)
这是核心部分,需要包含DedeCMS的核心文件,并解析Excel。

(图片来源网络,侵删)
<?php
// 引入DedeCMS的核心文件,以便使用其函数和变量
require_once(dirname(__FILE__) . '/config.php');
require_once(DEDEINC . '/dedetemplate.class.php');
require_once(DEDEINC . '/archive.class.php');
// 引入PHPExcel库
require_once 'PHPExcel/Classes/PHPExcel.php';
// 检查是否有文件上传
if (isset($_FILES['excel_file']) && $_FILES['excel_file']['error'] == 0) {
$fileTmpPath = $_FILES['excel_file']['tmp_name'];
$fileName = $_FILES['excel_file']['name'];
// 创建PHPExcel对象
$PHPExcel = new PHPExcel();
$PHPReader = new PHPExcel_Reader_Excel2007(); // 如果是.xlsx格式
// 如果是.xls格式,使用 $PHPReader = new PHPExcel_Reader_Excel5();
// 如果是.csv格式,使用 $PHPReader = new PHPExcel_Reader_CSV();
if (!$PHPReader->canRead($fileTmpPath)) {
die('无法读取Excel文件,请确保文件格式正确(.xlsx, .xls, .csv)。');
}
$PHPExcel = $PHPReader->load($fileTmpPath);
$currentSheet = $PHPExcel->getSheet(0); // 读取第一个工作表
// 获取总行数,注意第一行通常是标题,所以从第二行开始循环
$allRow = $currentSheet->getHighestRow();
$success_count = 0;
$error_count = 0;
// 循环读取每一行数据
for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
// 获取单元格数据 (根据你的Excel表结构调整列号)
$typeid = $currentSheet->getCell('A' . $currentRow)->getValue(); // A栏是栏目ID
$title = $currentSheet->getCell('B' . $currentRow)->getValue(); // B栏是标题
$writer = $currentSheet->getCell('C' . $currentRow)->getValue(); // C栏是作者
$source = $currentSheet->getCell('D' . $currentRow)->getValue(); // D栏是来源
$tags = $currentSheet->getCell('E' . $currentRow)->getValue(); // E栏是标签
$description = $currentSheet->getCell('F' . $currentRow)->getValue(); // F栏是摘要
$body = $currentSheet->getCell('G' . $currentRow)->getValue(); // G栏是内容
$litpic = $currentSheet->getCell('H' . $currentRow)->getValue(); // H栏是缩略图
$pubdate = $currentSheet->getCell('I' . $currentRow)->getValue(); // I栏是发布时间
// --- 数据验证 ---
if (empty($typeid) || empty($title) || empty($body)) {
echo "第 {$currentRow} 行数据不完整(栏目ID、标题、内容不能为空),已跳过。<br>";
$error_count++;
continue;
}
// --- 准备发布文章的数据 ---
$arctitle = $title;
$typeid = intval($typeid);
$ismake = 1; // 是否生成静态页
$channelid = 1; // 频道ID,1代表文章
$senddate = !empty($pubdate) ? strtotime($pubdate) : time(); // 发布时间
$mid = 1; // 发布者ID
$description = empty($description) ? cn_substr(strip_tags($body), 200) : $description; // 如果摘要为空,则从内容中截取
// 创建Dede文章发布类实例
$arc = new Archives($typeid);
$arc->GetArcInfo(); // 获取栏目信息
// 设置文章属性
$arc->Fields['arctitle'] = $arctitle;
$arc->Fields['typeid'] = $typeid;
$arc->Fields['channelid'] = $channelid;
$arc->Fields['senddate'] = $senddate;
$arc->Fields['mid'] = $mid;
$arc->Fields['writer'] = $writer;
$arc->Fields['source'] = $source;
$arc->Fields['description'] = $description;
$arc->Fields('tags') = $tags; // 设置标签
$arc->Fields['litpic'] = $litpic; // 设置缩略图
// 设置文章正文,注意:Dede对body字段有特殊处理
$arc->Fields['body'] = $body;
$arc->Fields['dutyadmin'] = $mid;
// 保存文章
if ($arc->Save()) {
echo "成功发布文章: 《{$arctitle}》<br>";
$success_count++;
} else {
echo "发布文章失败: 《{$arctitle}》<br>";
$error_count++;
}
}
echo "<hr><h2>导入完成!</h2>";
echo "成功: {$success_count} 篇<br>";
echo "失败: {$error_count} 篇";
} else {
die('请选择一个有效的Excel文件。');
}
第4步:使用和测试
- 将
upload_excel.php和process_excel.php放在dede/目录下。 - 访问
http://你的网站.com/dede/upload_excel.php。 - 按照方案一的步骤准备Excel表格,然后上传。
重要注意事项和常见问题
- 栏目ID:务必确保Excel中的栏目ID是正确的,否则文章会发布到错误的栏目,甚至发布失败。
- 文件路径:缩略图和文章内容中的图片路径必须是服务器上存在的完整路径。
- 权限问题:这是最常见的失败原因,确保
data目录、uploads目录以及你上传脚本的目录有足够的写入权限(通常是755)。 - 字符编码:确保你的Excel文件保存为UTF-8编码,并且在PHP脚本开头也声明了
header('Content-Type: text/html; charset=utf-8');,以避免中文乱码。 - 数据安全:在执行批量导入前,务必备份你的数据库!一旦出错,可以快速恢复。
- 特殊字符中如果包含一些特殊字符(如单引号),可能会导致SQL语句出错,如果遇到问题,可以考虑对数据进行转义处理。
- DedeCMS版本:不同版本的DedeCMS,其底层函数可能略有差异,如果脚本运行出错,请检查对应版本的函数文档。
希望这个详细的指南能帮助你成功实现DedeCMS的Excel批量发布功能!
