打开数据库编辑器,输入以下代码并执行(F5)

SELECT--表名       = case when a.colorder=1 then d.name else '' end,--表说明     = case when a.colorder=1 then isnull(f.value,'') else '' end,序号   = a.colorder,列名    = a.name,--数据类型       = b.name,数据类型   = b.name+'('+CONVERT(VARCHAR,COLUMNPROPERTY(a.id,a.name,'PRECISION'))+')',--长度       = COLUMNPROPERTY(a.id,a.name,'PRECISION'),--小数位   = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),--标识       = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '是'else '' end,--主键       = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (--                 SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '是' else '' end,--占用字节数 = a.length,允许空     = case when a.isnullable=1 then '是'else '否' end,--默认值     = isnull(e.text,''),说明   = isnull(g.[value],'')
FROMsyscolumns a
left joinsystypes b
ona.xusertype=b.xusertype
inner joinsysobjects d
ona.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'
left joinsyscomments e
ona.cdefault=e.id
left join
sys.extended_properties   g
ona.id=G.major_id and a.colid=g.minor_id
left joinsys.extended_properties f
ond.id=f.major_id and f.minor_id=0where d.name='B_Table'    --如果只查询指定表,加上此条件
order bya.id,a.colorder

全选查询结果,鼠标右键“连同标题一起复制”

新建 Excel 文件,粘贴刚才复制的内容,Excel表格中会出现粘贴的内容,再选中Excel表格的内容,复制

新建 Word 文件,依次列出表名称标题,依次选中每个表名称标题,并设置样式(右键也可弹出样式菜单),导航菜单栏 —》引用  —》目录 —》自动目录 —》即可生成目录菜单。

根据粘贴的表结构内容,粘贴到与表名称相对应的位置。导航菜单栏 —》引用  —》目录 —》更新目录。
*
*
生成Word文档 npoi
SqlSugar查询数据库信息

using System;
using System.Collections.Generic;
using AutoMapper;
using POS.Entity;namespace POS.Repository
{public interface IBulletinRepository : IRepository<BulletinDo>{List<SysteTable> GetAllTable();List<TableField> GetTableField(string tableName);}public class BulletinRepository : BaseRepository<BulletinDo, POSDbContext>, IBulletinRepository{public BulletinRepository(POSDbContext context) : base(context){}public List<SysteTable> GetAllTable(){string sql = "select name from SysObjects where XType='U'";return Context.Ado.SqlQuery<SysteTable>(sql);}public List<TableField> GetTableField(string tableName){string sql = @"SELECT--表名       = case when a.colorder=1 then d.name else '' end,--表说明     = case when a.colorder=1 then isnull(f.value,'') else '' end,序号   = a.colorder,列名    = a.name,--标识       = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then '是'else '' end,--主键       = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (--                 SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then '是' else '' end,数据类型   = b.name+'('+CONVERT(VARCHAR,COLUMNPROPERTY(a.id,a.name,'PRECISION'))+')',--占用字节数 = a.length,--长度       = COLUMNPROPERTY(a.id,a.name,'PRECISION'),--小数位数   = isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0),允许空     = case when a.isnullable=1 then '是'else '否' end,--默认值     = isnull(e.text,''),说明   = isnull(g.[value],'')FROM syscolumns aleft join systypes b on a.xusertype=b.xusertypeinner join sysobjects d on a.id=d.id  and d.xtype='U' and  d.name<>'dtproperties'left join syscomments e on a.cdefault=e.idleft join sys.extended_properties g on a.id=G.major_id and a.colid=g.minor_idleft join sys.extended_properties f on d.id=f.major_id and f.minor_id=0where d.name= '" + tableName +@"'order by a.id,a.colorder";return Context.Ado.SqlQuery<TableField>(sql);}}public class SysteTable{public string name { get; set; }}public class TableField{public string 序号 { get; set; }public string 列名 { get; set; }public string 数据类型 { get; set; }public string 允许空 { get; set; }public string 说明 { get; set; }}
}

*
*
Controller(直接查看Index页面即可下载Word文件)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using POS.Web.Filter;
using NPOI.XWPF.UserModel;
using System.Text;
using System.IO;
using NPOI.OpenXmlFormats.Wordprocessing;
using POS.Repository;namespace POS.Web.Controllers
{[UserInfo]public class BulletinController : ControllerBase{private readonly IBulletinRepository _bulletinRepo;public BulletinController(IBulletinRepository bulletinRepo){_bulletinRepo = bulletinRepo;}public ActionResult Index(){//return View();return File(CreateWordNew(), "application/octet-stream", $"文件名_{DateTime.Now.ToString("yyyyMMddHHmmssfff")}.docx");}private void CreateWord(){//创建document对象var doc = new XWPFDocument();//创建段落对象1var p1 = doc.CreateParagraph();p1.Alignment = ParagraphAlignment.CENTER; //字体居中//创建run对象//本节提到的所有样式都是基于XWPFRun的,//你可以把XWPFRun理解成一小段文字的描述对象,//这也是Word文档的特征,即文本描述性文档。//来自Tony Qu http://tonyqus.sinaapp.com/archives/609var runTitle = p1.CreateRun();runTitle.IsBold = true;runTitle.SetText("军检验收单");runTitle.FontSize = 16;runTitle.SetFontFamily("宋体", FontCharRange.None); //设置雅黑字体//创建段落对象2var p2 = doc.CreateParagraph();var run1 = p2.CreateRun();run1.SetText(" 军检项目号:");run1.FontSize = 12;run1.SetFontFamily("华文楷体", FontCharRange.None); //设置雅黑字体#region 头部(6 rows)//基本row12,列5;头部6行,4列var tableTop = doc.CreateTable(6, 5);tableTop.Width = 1000 * 5;tableTop.SetColumnWidth(0, 1300); /* 设置列宽 */tableTop.SetColumnWidth(1, 500); /* 设置列宽 */tableTop.SetColumnWidth(2, 1000); /* 设置列宽 */tableTop.SetColumnWidth(3, 500); /* 设置列宽 */tableTop.SetColumnWidth(4, 1700); /* 设置列宽 */tableTop.GetRow(0).MergeCells(1, 4); /* 合并行 */tableTop.GetRow(0).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "产品名称"));tableTop.GetRow(0).GetCell(1).SetParagraph(SetCellText(doc, tableTop, "              "));tableTop.GetRow(1).MergeCells(1, 4);tableTop.GetRow(1).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "项目名称"));tableTop.GetRow(1).GetCell(1).SetParagraph(SetCellText(doc, tableTop, "              "));tableTop.GetRow(2).MergeCells(1, 4);tableTop.GetRow(2).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "施工依据", ParagraphAlignment.CENTER, 45));tableTop.GetRow(2).GetCell(1).SetParagraph(SetCellText(doc, tableTop, "              ", ParagraphAlignment.CENTER, 45));tableTop.GetRow(3).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "检验方式"));tableTop.GetRow(3).GetCell(1).SetParagraph(SetCellText(doc, tableTop, "独立检验"));tableTop.GetRow(3).GetCell(2).SetParagraph(SetCellText(doc, tableTop, "              "));tableTop.GetRow(3).GetCell(3).SetParagraph(SetCellText(doc, tableTop, "联合检验"));tableTop.GetRow(3).GetCell(4).SetParagraph(SetCellText(doc, tableTop, "              "));tableTop.GetRow(4).MergeCells(3, 4);tableTop.GetRow(4).GetCell(0).SetParagraph(SetCellText(doc, tableTop, "设备名称及编号"));tableTop.GetRow(4).GetCell(1).SetParagraph(SetCellText(doc, tableTop, "              "));tableTop.GetRow(4).GetCell(2).SetParagraph(SetCellText(doc, tableTop, "设备制造厂"));tableTop.GetRow(4).GetCell(3).SetParagraph(SetCellText(doc, tableTop, "              "));//tableTop.GetRow(4).GetCell(3).SetBorderBottom(XWPFtableTop.XWPFBorderType.NONE,0,0,"");tableTop.GetRow(5).MergeCells(0, 4);var para = new CT_P();var pCell = new XWPFParagraph(para, tableTop.Body);pCell.Alignment = ParagraphAlignment.LEFT; //字体居中var r1c1 = pCell.CreateRun();r1c1.SetText("检验要素共9项");r1c1.FontSize = 12;r1c1.SetFontFamily("华文楷体", FontCharRange.None); //设置雅黑字体tableTop.GetRow(5).GetCell(0).SetParagraph(pCell);#endregion#region 检验要素列表部分(数据库读取循环显示)var tableContent = doc.CreateTable(45, 5);tableContent.Width = 1000 * 5;tableContent.SetColumnWidth(0, 300); /* 设置列宽 */tableContent.SetColumnWidth(1, 1000); /* 设置列宽 */tableContent.SetColumnWidth(2, 1000); /* 设置列宽 */tableContent.SetColumnWidth(3, 1000); /* 设置列宽 */tableContent.SetColumnWidth(4, 1700); /* 设置列宽 */tableContent.GetRow(0).GetCell(0).SetParagraph(SetCellText(doc, tableContent, "序号"));tableContent.GetRow(0).GetCell(1).SetParagraph(SetCellText(doc, tableContent, "检验要素"));tableContent.GetRow(0).GetCell(2).SetParagraph(SetCellText(doc, tableContent, "指标要求"));tableContent.GetRow(0).GetCell(3).SetParagraph(SetCellText(doc, tableContent, "实测值"));tableContent.GetRow(0).GetCell(4).SetParagraph(SetCellText(doc, tableContent, "测量工具编号及有效期"));for (var i = 1; i < 45; i++){tableContent.GetRow(i).GetCell(0).SetParagraph(SetCellText(doc, tableContent, i.ToString(), ParagraphAlignment.CENTER, 50));tableContent.GetRow(i).GetCell(1).SetParagraph(SetCellText(doc, tableContent, "检验要素", ParagraphAlignment.CENTER, 50));tableContent.GetRow(i).GetCell(2).SetParagraph(SetCellText(doc, tableContent, "指标要求", ParagraphAlignment.CENTER, 50));tableContent.GetRow(i).GetCell(3).SetParagraph(SetCellText(doc, tableContent, "实测值", ParagraphAlignment.CENTER, 50));tableContent.GetRow(i).GetCell(4).SetParagraph(SetCellText(doc, tableContent, "测量工具编号及有效期", ParagraphAlignment.CENTER, 50));}#endregion#region 底部内容var tableBottom = doc.CreateTable(5, 4);tableBottom.Width = 1000 * 5;tableBottom.SetColumnWidth(0, 1000); /* 设置列宽 */tableBottom.SetColumnWidth(1, 1500); /* 设置列宽 */tableBottom.SetColumnWidth(2, 1000); /* 设置列宽 */tableBottom.SetColumnWidth(3, 1500); /* 设置列宽 */tableBottom.GetRow(0).MergeCells(0, 3); /* 合并行 */tableBottom.GetRow(0).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "附件:", ParagraphAlignment.LEFT, 80));tableBottom.GetRow(0).Height = 30;tableBottom.GetRow(1).MergeCells(0, 3); /* 合并行 */tableBottom.GetRow(1).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "检验结论:", ParagraphAlignment.LEFT, 80));tableBottom.GetRow(1).Height = 30;tableBottom.GetRow(2).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "施工部门"));tableBottom.GetRow(2).GetCell(1).SetParagraph(SetCellText(doc, tableBottom, "        "));tableBottom.GetRow(2).GetCell(2).SetParagraph(SetCellText(doc, tableBottom, "报验日期"));tableBottom.GetRow(2).GetCell(3).SetParagraph(SetCellText(doc, tableBottom, "        "));tableBottom.GetRow(3).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "军检次数"));tableBottom.GetRow(3).GetCell(1).SetParagraph(SetCellText(doc, tableBottom, "        "));tableBottom.GetRow(3).GetCell(2).SetParagraph(SetCellText(doc, tableBottom, "军检日期"));tableBottom.GetRow(3).GetCell(3).SetParagraph(SetCellText(doc, tableBottom, "        "));tableBottom.GetRow(4).GetCell(0).SetParagraph(SetCellText(doc, tableBottom, "检验员"));tableBottom.GetRow(4).GetCell(1).SetParagraph(SetCellText(doc, tableBottom, "        "));tableBottom.GetRow(4).GetCell(2).SetParagraph(SetCellText(doc, tableBottom, "军代表"));tableBottom.GetRow(4).GetCell(3).SetParagraph(SetCellText(doc, tableBottom, "        "));#endregion#region 保存导出WebFormvar ms = new MemoryStream();doc.Write(ms);Response.AddHeader("Content-Disposition",string.Format("attachment; filename={0}.doc",HttpUtility.UrlEncode("文件名" + "_" + DateTime.Now.ToString("yyyyMMddHHmmssfff"),Encoding.UTF8)));Response.BinaryWrite(ms.ToArray());Response.End();ms.Close();ms.Dispose();#endregion}private byte[] CreateWordNew(){var tableList = _bulletinRepo.GetAllTable();//创建document对象var doc = new XWPFDocument();//创建段落对象1var p1 = doc.CreateParagraph();p1.Alignment = ParagraphAlignment.CENTER;var runTitle = p1.CreateRun();runTitle.IsBold = true;runTitle.SetText("数据库名:dbHospital");runTitle.FontSize = 12;runTitle.SetFontFamily("宋体", FontCharRange.None);foreach (var item in tableList){//创建段落对象2var pFor = doc.CreateParagraph();var runFor = pFor.CreateRun();runFor.SetText($"表名:{item.name}");runFor.FontSize = 10;runFor.IsBold = true;runFor.SetFontFamily("宋体", FontCharRange.None);pFor.Alignment = ParagraphAlignment.CENTER;#region 检验要素列表部分(数据库读取循环显示)var result = _bulletinRepo.GetTableField(item.name);int total = result.Count() + 1;var tableContent = doc.CreateTable(total, 5);tableContent.Width = 1000 * 5;tableContent.SetColumnWidth(0, 300); /* 设置列宽 */tableContent.SetColumnWidth(1, 1000); /* 设置列宽 */tableContent.SetColumnWidth(2, 1000); /* 设置列宽 */tableContent.SetColumnWidth(3, 1000); /* 设置列宽 */tableContent.SetColumnWidth(4, 1700); /* 设置列宽 */tableContent.GetRow(0).GetCell(0).SetParagraph(SetCellText(doc, tableContent, "序号"));tableContent.GetRow(0).GetCell(1).SetParagraph(SetCellText(doc, tableContent, "列名"));tableContent.GetRow(0).GetCell(2).SetParagraph(SetCellText(doc, tableContent, "数据类型"));tableContent.GetRow(0).GetCell(3).SetParagraph(SetCellText(doc, tableContent, "允许空"));tableContent.GetRow(0).GetCell(4).SetParagraph(SetCellText(doc, tableContent, "说明"));int i = 1;foreach (var fieldItem in result){tableContent.GetRow(i).GetCell(0).SetParagraph(SetCellText(doc, tableContent, fieldItem.序号, ParagraphAlignment.LEFT, 24));tableContent.GetRow(i).GetCell(1).SetParagraph(SetCellText(doc, tableContent, fieldItem.列名, ParagraphAlignment.LEFT, 24));tableContent.GetRow(i).GetCell(2).SetParagraph(SetCellText(doc, tableContent, fieldItem.数据类型, ParagraphAlignment.LEFT, 24));tableContent.GetRow(i).GetCell(3).SetParagraph(SetCellText(doc, tableContent, fieldItem.允许空, ParagraphAlignment.LEFT, 24));tableContent.GetRow(i).GetCell(4).SetParagraph(SetCellText(doc, tableContent, fieldItem.说明, ParagraphAlignment.LEFT, 24));i++;}i = 0;#endregion}#region 保存导出WebFormvar ms = new MemoryStream();doc.Write(ms);ms.Flush();ms.Close();ms.Dispose();#endregionreturn ms.ToArray();}/// <summary>/// 设置字体格式/// </summary>/// <param name="doc"></param>/// <param name="table"></param>/// <param name="setText"></param>/// <returns></returns>public XWPFParagraph SetCellText(XWPFDocument doc, XWPFTable table, string setText){//table中的文字格式设置var para = new CT_P();var pCell = new XWPFParagraph(para, table.Body);pCell.Alignment = ParagraphAlignment.CENTER; //字体居中pCell.VerticalAlignment = TextAlignment.CENTER; //字体居中pCell.FillBackgroundColor = "#D3D3D3";var r1c1 = pCell.CreateRun();r1c1.SetText(setText);r1c1.FontSize = 9;r1c1.SetFontFamily("宋体", FontCharRange.None); //设置雅黑字体r1c1.SetTextPosition(24); //设置高度return pCell;}/// <summary>///     设置单元格格式/// </summary>/// <param name="doc">doc对象</param>/// <param name="table">表格对象</param>/// <param name="setText">要填充的文字</param>/// <param name="align">文字对齐方式</param>/// <param name="textPos">rows行的高度</param>/// <returns></returns>public XWPFParagraph SetCellText(XWPFDocument doc, XWPFTable table, string setText, ParagraphAlignment align,int textPos){var para = new CT_P();var pCell = new XWPFParagraph(para, table.Body);//pCell.Alignment = ParagraphAlignment.LEFT;//字体pCell.Alignment = align;pCell.VerticalAlignment = TextAlignment.CENTER; //字体居中var r1c1 = pCell.CreateRun();r1c1.SetText(setText);r1c1.FontSize = 9;r1c1.SetFontFamily("宋体", FontCharRange.None); //设置雅黑字体r1c1.SetTextPosition(textPos); //设置高度return pCell;}}
}

查询【数据库】所有【表】名称

select o.name as TableName,isnull(p.value, '') AS TableMemo
from sysobjects o
left join sys.extended_properties p On o.id = p.major_id and p.minor_id = 0 and p.name = 'MS_Description'
where xtype = 'U' and o.name not in ('sysdiagrams', 'sp_upgraddiagrams')
order by o.name


*
*
*
*
*

Sql Server 生成 Word 文档 表结构相关推荐

  1. 导出数据库表信息生成Word文档(数据字典)

    平时多积累一些好工具,才能提高工作效率,早点下班 1. 关键字百度 Java 导出数据库表信息生成Word文档 gitee地址 2.拉取,运行 2.1 idea识别.导入maven工具 2.2 下载完 ...

  2. 导出数据库表信息生成Word文档

    一.背景描述 系统上线或者交付,或者需要提供整理数据库表信息,如果一个个整理未免麻烦,接下来一个demo示例如何用JAVA导出Mysql数据库表信息生成Word文档. 1.项目源码地址:https:/ ...

  3. Java使用FreeMarker自动生成Word文档(带图片和表单)

    Java使用FreeMarker自动生成Word文档(带图片和表单) 1 背景 2 目标效果 3 创建Word模板 3.1 创建模板文档 3.2 转换模板文档 3.3 处理模板文档中的占位符 3.4 ...

  4. java 导出word换行_Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看看生成的word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导 ...

  5. PoiDocxDemo【Android将表单数据生成Word文档的方案之二(基于Poi4.0.0),目前只能java生成】...

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个是<PoiDemo[Android将表单数据生成Word文档的方案之二(基于Poi4.0.0)]>的扩展,上一篇是根 ...

  6. android 生成多个表单,Android根据word模板文档将表单数据生成word文档的方案整理...

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 尝试的方案包括以下几种: freemarker 只能在java项目上运行,无法在Android项目上运行: poi 解析doc文件可 ...

  7. Excel转Word,Excel导出Word,利用Excel表批量生成Word文档,邮件合并进阶版

    单击播放视频教材 利用Excel数据批量生成Word文档升级版,Excel转W 01需求概述 假设有图1所示的数据,需要批量生成WORD成绩通知单,通知单必须遵循图2的样式. (案例中的姓名.学校名称 ...

  8. Java 导出数据库表信息生成Word文档

    一.前言 最近看见朋友写了一个导出数据库生成word文档的业务,感觉很有意思,研究了一下,这里也拿出来与大家分享一波~ 先来看生成word文档效果吧 下面我们也来一起简单的实现吧 二.Java 导出数 ...

  9. 数据库数据生成word文档的方法

    从库里取纪录生成word文档. 主要有这么几种方法: 1.改头,就是象excel似的 Response.Buffer = TRUE Response.ContentType = "appli ...

最新文章

  1. entOS 7 安装 python3+pip3+chrome+chromedriver+selenium+requests 无GUI运行脚本
  2. Cracer渗透-windows基础(系统目录,服务,端口,注册表)
  3. 大学英语四六各项分值
  4. 根据线程名获取线程及停止线程
  5. Kubernetes安装时gpg: no valid OpenPGP data found. 的另外一种解决办法
  6. *第六周*数据结构实践项目三【括号的配对】
  7. Java并发编程实战读书笔记(1)
  8. 移动机器人路径规划:人工势场法
  9. 洛谷3244 [HNOI2015]落忆枫音
  10. uniapp引入腾讯防水墙
  11. 国内外免费公用mqtt测试服务器推荐
  12. Python:实现greedy knapsack贪婪的背包算法(附完整源码)
  13. 做ctf题目的时候运行程序就会显示ImportError: cannot import name ‘flag‘ from ‘secret‘ 求大佬解答
  14. android2.3 微信,Android新版微信2.3支持周边朋友查找
  15. Windows编程-创建窗口
  16. Java基础Day01-Java基础语法
  17. PHP编辑器哪个好用些?
  18. scrapy图片爬取(爬取站长素材中的高清图片)
  19. 输电线路防外力破坏图像数据集(1500张图像,VOC标签,5类目标)
  20. 《金融行业应用解决方案白皮书》发布,金融自主创新未来可期!

热门文章

  1. 利用Python+opencv模块的dnn实现Faster R-CNN(一)
  2. 给大家分享下仿QQ消息页面横向滑出菜单,Item内容较多的情况
  3. 打地鼠java代码流程图_51单片机 普中51 打地鼠游戏 仿真 程序 流程图
  4. 2015年基金公司排名排行榜,基金公司排名2015一览
  5. 踩坑到怀疑人生:win10下tensorRT加速YOLOV5
  6. abb机器人指令手册_ABB机器人速度设置
  7. 2021年秋招面经分享·平头哥【芯片设计/验证/DFT工程师】
  8. spring事物配置备份
  9. 入侵特斯拉汽车Model S 信息娱乐系统漏洞
  10. C++项目和解决方案的区别