C#使用NPOI进行word的读写

目录

  • 一、简介

    • 1、操作Word的类库:

  • 二、简单使用

    • 1、XWPFDocument类的实例化

    • 2、设置页面的大小

    • 3、段落处理

    • 4、表格处理

    • 5、页眉页脚处理

  • 三、综合示例

  • 四、参考

一、简介

1、操作Word的类库:

二、简单使用

1、XWPFDocument类的实例化

该类的实例对应一个word文档

XWPFDocument MyDoc = new XWPFDocument();

2、设置页面的大小

如果不进行页面大小的设置,默认是纵向的A4大小。横向的A4的页面大小 ,如果要纵向,宽高两个值调换即可。

T_SectPr m_SectPr = new CT_SectPr();       //实例一个尺寸类的实例
m_SectPr.pgSz.w = 16838;        //设置宽度(这里是一个ulong类型)
m_SectPr.pgSz.h = 11906;        //设置高度(这里是一个ulong类型)
MyDoc.Document.body.sectPr = m_SectPr;          //设置页面的尺寸

这里的单位比较特殊,用的是缇(Twip)这是一种和屏幕无关的长度单位,目的是为了让应用程序元素输出到不同设备时都能保持一致的计算方式。

换算关系:

  • 1英寸=1440缇

  • 1厘米=567缇

  • 1磅=20缇

  • 1像素=15缇

常用页面尺寸:(单位Twip)

  • A4(纵向):W=11906 H=16838

  • A4(纵向):W=16838 H=11906

  • A5 :W=8390 H=11906

  • A6 :W=5953 H=8390

示例:控制word页内边距

//创建document对象
var doc = new XWPFDocument();
doc.Document.body.sectPr = new CT_SectPr();
CT_SectPr m_SectPr = doc.Document.body.sectPr;
m_SectPr.pgSz.h = (ulong)16838;
m_SectPr.pgSz.w = (ulong)11906;
//页面边距
m_SectPr.pgMar.left = (ulong)800;//左边距
m_SectPr.pgMar.right = (ulong)800;//右边距
m_SectPr.pgMar.top = "850";//上边距
m_SectPr.pgMar.bottom = "850";//下边距

3、段落处理

创建段落

段落为XWPFParagraph类型的实例,段落由XWPFDocument实例的使用CreateParagraph()方法生成。

XWPFParagraph MyParagraph = MyDoc.CreateParagraph();

该段落类有很多属性,用于设置与段落相关的内容。主要有以下几个方面

  1. BorderXXXXX属性:该值用于设置边界的样式。该属性用于获取或设置一个Borders枚举类型的值,

  2. FillBackgroundColor属性:背景填充的颜色。该属性获取或设置一个string类型的变量。该变量的含义是某个颜色的RGB值(在NPOI里所有的颜色都是以这种形式表示的)。例如设置为黑色则对应的代码如下:

    MyParagraph.FillBackgroundColor = "#000000";
  3. Alignment属性:段落的对齐方式。该属性获取或设置一个ParagraphAlignment的枚举值。

  4. VerticalAlignment属性:文本垂直方向的对齐方式。该属性获取或设置一个TextAlignment 的枚举值。

  5. IndentationFirstLine属性:用于设置段落的首行缩进。该属性获取或设置一个int型变量。
    这个int值并不是缩进的字数,这里可以用一个函数计算缩进的距离。

//段落缩进   返回值为对应的缩进距离
//(fontname:文字类型名称   fontsize:文字大小    fontcount:缩进数目 fontstyle:文字类型(斜体、粗体...))
int Indentation(String fontname, int fontsize, int fontnum, FontStyle fontstyle)
{Graphics gp = this.CreateGraphics();gp.PageUnit = GraphicsUnit.Point;SizeF size = gp.MeasureString("字", new Font(fontname, fontsize * 0.75F, fontstyle));return (int)size.Width * fontnum * 10;
}

示例:创建段落

var paragraph = doc.CreateParagraph();
paragraph.Alignment = ParagraphAlignment.CENTER; //字体居中
var run = paragraph.CreateRun();
run.IsBold = true;
run.SetText(contend);
run.FontSize = 28;
run.SetFontFamily("黑体", FontCharRange.None); //设置黑体
//控制段落与其他元素的上下距离
paragraph.SpacingBeforeLines = 20;//上方距离
paragraph.SpacingAfterLines = 20;//下方距离

换页(本页未满直接写下一页)

aragraph = doc.CreateParagraph();
paragraph.CreateRun().AddBreak(BreakType.PAGE);

文本处理

  • doc.Paragraphs 获取到文档里的所有的段落对象;

  • para.ParagraphText 获取段落的文本数据;

  • para.ReplaceText(要被替换的文本,替换文本) 替换段落的文本(模板能实现的关键)

4、表格处理

doc.Tables 获取文档里的所有的表格对象;//doc.Tables获取的只是Word中最外层的表格,不包含嵌套内层的。
cell.Tables;//获取嵌套单元格可使用
row.Rows //获取表格所有行;
row.GetTableICells() ;//获取表格行的所有单元格;
获取到单元格之后就可以获取单元格里的文本段落(Paragraphs)并且进行文本替换

创建表格

var table = doc.CreateTable(行数, 列数);
table.Width = 5000;

控制表格中列宽(这里需要注意,只设置一行的列宽一旦插入文字就会使设置的列宽失效,所以要把每一个单元格都要设置上)

for (int r = 0; r < 8; r++)
{SetCellWith(table.GetRow(r).GetCell(0), "600");SetCellWith(table.GetRow(r).GetCell(1), "1500");SetCellWith(table.GetRow(r).GetCell(2), "1500");SetCellWith(table.GetRow(r).GetCell(3), "600");}

设置表格中单元格竖直居中

var rowcell = table.GetRow(r).GetCell(c);
rowcell.SetVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);

设置单元格内容

//table中的文字格式设置
var para = new CT_P();
var pCell = new XWPFParagraph(para, table.Body);
pCell.Alignment = paragraphAlignment; //字体居中
pCell.VerticalAlignment = TextAlignment.CENTER; //字体居中var r1c1 = pCell.CreateRun();
r1c1.SetText(setText);
r1c1.FontSize = 11;
r1c1.SetFontFamily("宋体", FontCharRange.None); //设置雅黑字体
pCell.SpacingAfterLines = 40;
pCell.SpacingBeforeLines = 40;
//放入单元格
table.GetRow(4).GetCell(1).SetParagraph(pCell);

表格中换行

var run= paragraph.CreateRun();
run.SetText(contends[i]);
run.FontSize = 11;
run.SetFontFamily("宋体", FontCharRange.None); 
run.AddBreak(BreakType.TEXTWRAPPING);//换行

合并单元格

table.GetRow(rowIndex).MergeCells(fromCol, toCol);//合并列

水平合并行单元格

CT_Tc cttcofRowThird = cell.GetCTTc();
CT_TcPr ctProfRowThird = cttcofRowThird.AddNewTcPr();
ctProfRowThird.gridSpan = new CT_DecimalNumber();
ctProfRowThird.gridSpan.val = num.ToString();//合并num列

合并行、垂直合并列单元格

public void MYMergeRows(XWPFTable table, int fromRow, int toRow, int colIndex)
{for (int rowIndex = fromRow; rowIndex <= toRow; rowIndex++){XWPFTableCell rowcell = table.GetRow(rowIndex).GetCell(colIndex);rowcell.SetVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);CT_Tc cttc = rowcell.GetCTTc();CT_TcPr ctTcPr = cttc.tcPr;if (ctTcPr == null){ctTcPr = cttc.AddNewTcPr();}if (rowIndex == fromRow){// The first merged cell is set with RESTART merge valuectTcPr.AddNewVMerge().val = ST_Merge.restart;}else{// Cells which join (merge) the first one, are set with CONTINUEctTcPr.AddNewVMerge().val = ST_Merge.@continue;//继续合并行}ctTcPr.AddNewVAlign().val = ST_VerticalJc.center;//垂直}
}

5、页眉页脚处理

XWPFDocument doc = new XWPFDocument();
doc.Document.body.sectPr = new CT_SectPr();
CT_SectPr m_SectPr = doc.Document.body.sectPr;//创建页眉
CT_Hdr m_Hdr = new CT_Hdr();
CT_P m_P = m_Hdr.AddNewP();
m_P.AddNewR().AddNewT().Value = "页眉内容值";
m_P.AddNewPPr().AddNewJc().val = ST_Jc.center;// 页眉居中//创建页眉关系(headern.xml)
XWPFRelation Hrelation = XWPFRelation.HEADER;
XWPFHeader m_h = (XWPFHeader)doc.CreateRelationship(Hrelation, XWPFFactory.GetInstance(), doc.HeaderList.Count + 1);
doc.CreateFootnotes();//设置页眉
m_h.SetHeaderFooter(m_Hdr);
CT_HdrFtrRef m_HdrFtr = m_SectPr.AddNewHeaderReference();
m_h.GetRelationById(m_HdrFtr.id);//创建页脚
CT_Ftr m_ftr = new CT_Ftr();
CT_P m_fP = m_ftr.AddNewP();
m_fP.AddNewR().AddNewT().Value = "页脚内容值";
m_fP.AddNewPPr().AddNewJc().val = ST_Jc.center;// 页眉居中//创建页脚关系(footern.xml)
XWPFRelation Frelation = XWPFRelation.FOOTER;
XWPFFooter m_f = (XWPFFooter)doc.CreateRelationship(Frelation, XWPFFactory.GetInstance(), doc.FooterList.Count + 1);//设置页脚
m_f.SetHeaderFooter(m_ftr);
m_HdrFtr = m_SectPr.AddNewFooterReference();
m_HdrFtr.type = ST_HdrFtr.@default;
m_f.GetRelationById(m_HdrFtr.id);

三、综合示例

实例1:

CT_SectPr srcpr = new CT_SectPr();
//设置A4纸纵向,如果要横向,两个值调换即可
srcpr.pgSz.w = (ulong)11906;
srcpr.pgSz.h = (ulong)16838;XWPFDocument doc = new XWPFDocument();
doc.Document.body.sectPr = srcpr;
//输出标题
XWPFParagraph ptitle = doc.CreateParagraph();
ptitle.Alignment = ParagraphAlignment.CENTER;
XWPFRun titlerun = ptitle.CreateRun(); //向该段落中添加文字
titlerun.SetText("标题");
titlerun.IsBold = true;
titlerun.FontFamily = "华文行楷";
titlerun.FontSize = 30;
titlerun.SetColor("blue");//输出一个段落
XWPFParagraph p2 = doc.CreateParagraph();
p2.Alignment = ParagraphAlignment.CENTER;
p2.IndentationFirstLine = (int)100; //首行缩进
XWPFRun r2 = p2.CreateRun();
r2.SetText(string.Format("生成时间:{0}", DateTime.Now.ToString("yyyy-MM-dd HH:mm")));
r2.FontSize = 15;
titlerun.FontFamily = "宋体";StringBuilder sb = new StringBuilder();
using (FileStream stream = File.OpenRead("simple.docx"))
{XWPFDocument docx = new XWPFDocument(stream);//页眉foreach (XWPFHeader xwpfHeader in docx.HeaderList){sb.AppendLine(string.Format("{0}", new string[] { xwpfHeader.Text }));}//页脚foreach (XWPFFooter xwpfFooter in docx.FooterList){sb.AppendLine(string.Format("{0}", new string[] { xwpfFooter.Text }));}//读取段落foreach (var para in docx.Paragraphs){string text = para.ParagraphText; //获得文本var runs = para.Runs;// string styleid = para.Style;for (int i = 0; i < runs.Count; i++){var run = runs[i];text = run.ToString(); //获得run的文本sb.Append(text + ",");}}//读取表格foreach (XWPFTable table in docx.Tables){//循环表格行foreach (XWPFTableRow row in table.Rows){foreach (XWPFTableCell cell in row.GetTableCells()){sb.Append(cell.GetText());}}}//读取图片foreach (XWPFPictureData pictureData in docx.AllPictures){string picExtName = pictureData.SuggestFileExtension();string picFileName = pictureData.FileName;byte[] picFileContent = pictureData.Data;string picTempName = string.Format(Guid.NewGuid().ToString() + "_" + picFileName + "." + picExtName);using (FileStream fs = new FileStream(picTempName, FileMode.Create, FileAccess.Write)){fs.Write(picFileContent, 0, picFileContent.Length);fs.Close();}sb.AppendLine(picTempName);}Console.WriteLine(sb.ToString());
}FileStream out1 = new FileStream("simple.docx", FileMode.Create);
doc.Write(out1);
out1.Close();

运行结果:

实例2:实现了表的简单操作:创建表、创建行、创建单元,单元行和列的合并。

private void button2_Click(object sender, EventArgs e){MemoryStream ms = new MemoryStream();XWPFDocument m_Docx = new XWPFDocument();m_Docx = CreatDocxTable();m_Docx.Write(ms);ms.Flush();SaveToFile(ms, "d:\\test.docx");}protected XWPFDocument CreatDocxTable(){XWPFDocument m_Docx = new XWPFDocument();XWPFParagraph p0 = m_Docx.CreateParagraph();XWPFRun r0 = p0.CreateRun();r0.SetText("DOCX表");XWPFTable table = m_Docx.CreateTable(1, 3);//创建一行3列表table.GetRow(0).GetCell(0).SetText("111");table.GetRow(0).GetCell(1).SetText("222");table.GetRow(0).GetCell(2).SetText("333");XWPFTableRow m_Row = table.CreateRow();//创建一行m_Row = table.CreateRow();//创建一行m_Row.GetCell(0).SetText("211");//合并单元格m_Row = table.InsertNewTableRow(0);//表头插入一行XWPFTableCell cell = m_Row.CreateCell();//创建一个单元格,创建单元格时就创建了一个CT_PCT_Tc cttc = cell.GetCTTc();CT_TcPr ctPr = cttc.AddNewTcPr();//ctPr.gridSpan.val = "3";//合并3列cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;cttc.GetPList()[0].AddNewR().AddNewT().Value = "abc";XWPFTableRow td3 = table.InsertNewTableRow(table.Rows.Count - 1);//插入行cell = td3.CreateCell();cttc = cell.GetCTTc();ctPr = cttc.AddNewTcPr();//ctPr.gridSpan.val = "3";cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;cttc.GetPList()[0].AddNewR().AddNewT().Value = "qqq";//表增加行,合并列CT_Row m_NewRow = new CT_Row();m_Row = new XWPFTableRow(m_NewRow, table);table.AddRow(m_Row); //必须要!!!cell = m_Row.CreateCell();cttc = cell.GetCTTc();ctPr = cttc.AddNewTcPr();//ctPr.gridSpan.val = "3";cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;cttc.GetPList()[0].AddNewR().AddNewT().Value = "sss";//表未增加行,合并2列,合并2行//1行m_NewRow = new CT_Row();m_Row = new XWPFTableRow(m_NewRow, table);table.AddRow(m_Row);cell = m_Row.CreateCell();cttc = cell.GetCTTc();ctPr = cttc.AddNewTcPr();//ctPr.gridSpan.val = "2";ctPr.AddNewVMerge().val = ST_Merge.restart;//合并行ctPr.AddNewVAlign().val = ST_VerticalJc.center;//垂直居中cttc.GetPList()[0].AddNewPPr().AddNewJc().val = ST_Jc.center;cttc.GetPList()[0].AddNewR().AddNewT().Value = "xxx";cell = m_Row.CreateCell();cell.SetText("ddd");//2行,多行合并类似m_NewRow = new CT_Row();m_Row = new XWPFTableRow(m_NewRow, table);table.AddRow(m_Row);cell = m_Row.CreateCell();cttc = cell.GetCTTc();ctPr = cttc.AddNewTcPr();//ctPr.gridSpan.val = "2";ctPr.AddNewVMerge().val = ST_Merge.@continue;//合并行cell = m_Row.CreateCell();cell.SetText("kkk");3行//m_NewRow = new CT_Row();//m_Row = new XWPFTableRow(m_NewRow, table);//table.AddRow(m_Row);//cell = m_Row.CreateCell();//cttc = cell.GetCTTc();//ctPr = cttc.AddNewTcPr();//ctPr.gridSpan.val = "2";//ctPr.AddNewVMerge().val = ST_Merge.@continue;//cell = m_Row.CreateCell();//cell.SetText("hhh");return m_Docx;}static void SaveToFile(MemoryStream ms, string fileName){using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write)){byte[] data = ms.ToArray();fs.Write(data, 0, data.Length);fs.Flush();data = null;}}

运行结果:

实例3:

 DataTable dt = new DataTable();//创建表private void button2_Click(object sender, EventArgs e){dt.Columns.Add("姓名");dt.Columns.Add("性别");dt.Columns.Add("年龄");dt.Rows.Add("zyr1","男","25");dt.Rows.Add("zyr2", "男", "26");dt.Rows.Add("zyr3", "男", "27");//dataGridView1.DataSource = dt;XWPFDocument doc = new XWPFDocument();XWPFTable table = doc.CreateTable(dt.Rows.Count + 1, dt.Columns.Count);//声明整个表的大小 +1是为了增加一行表头//增加表头信息for (int i = 0; i < dt.Columns.Count; i++){table.GetRow(0).GetCell(i).SetText(dt.Columns[i].ColumnName);}//增加内容信息for (int i = 0; i < dt.Rows.Count; i++){for (int j = 0; j < dt.Columns.Count; j++){string Vt = Convert.ToString(dt.Rows[i][j]);table.GetRow(i + 1).GetCell(j).SetText(Vt);}}string FilePath = Environment.CurrentDirectory;if (!Directory.Exists(FilePath))Directory.CreateDirectory(FilePath);FilePath = FilePath + "\\测试word文档.doc";FileStream Fs = new FileStream(FilePath, FileMode.OpenOrCreate);doc.Write(Fs);Fs.Close();}

运行结果:

四、参考

Word与Excel字号对照表

推荐一个公众号:dotNET编程大全,扫码关注!

需加微信交流群的,请加小编微信号z438679770,切记备注 加群,小编将会第一时间邀请你进群!

 每日分享不易,"在看"就是鼓励!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/304526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

weblogic修改控制台ip_「Weblogic学习」Weblogic知识要点之JNDI/JTA编程开发

给它一个名字&#xff0c;它就能提供你要的服务&#xff0c;JNDI就是这么地任性。想任性的霸占数据&#xff1f;JTA为你把风。这期&#xff0c;谈谈JNDI和JTA的简单介绍&#xff0c;一起看看吧……JNDI编程JNDI(Java Naming and Directory Interface)是SUN公司提供的一种标准的…

java不适合开发cv吗_JavaCV开发环境的配置

一.安装opencv2.4.4、测试运行OpenCV-2.4.4.exe&#xff0c;就是解压&#xff0c;把它解压到一个你喜欢的地方 ——1.1 路径最好不要太深&#xff0c;点啊点的最讨厌了2. 添加 ***\OpenCV2.4.4\build\x64\vc11\bin; 到环境变量的PATH后面 ——2.1 ***是你放OpenCV2.4.4的地方…

NA-NP-IE系列实验5:配置文件的备份和IOS 的备份

实验5:配置文件的备份和IOS 的备份<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1. 实验目的通过本实验&#xff0c;读者可以掌握如下技能&#xff1a;&#xff08;1&#xff09; 熟悉TFTP 服务器的使用&#xff08;2&#xf…

浅析 Sunday 算法

背景Sunday 算法是 Daniel M.Sunday 于 1990 年提出的字符串模式匹配。其效率在匹配随机的字符串时比其他匹配算法还要更快。Sunday 算法的实现可比 KMP&#xff0c;BM 的实现容易太多。算法过程假定主串为 "HERE IS A SIMPLE EXAMPLE"&#xff0c;模式串为 "EX…

.NET 6 Preview 1发布!

喜欢就关注我们吧&#xff01;.NET 6 首个预览版已发布&#xff0c;官方表示 .NET 6 的核心目标是完成从 .NET 5 开始的 .NET 统一计划的最后部分。此版本还将对 .NET 整体进行重大改进&#xff0c;包括针对云、桌面和移动应用程序的改进。.NET 6 计划于2021年11月正式发布&…

vba cad 获取宏的路径_VBA批量创建文件目录及链接,建议收藏备用

小伙伴们&#xff0c;之前有跟大家分享过Power Query获取文件夹内文件清单及其属性的方法【Excel快速获取文件列表及文件属性】。今天教大家通过VBA代码来实现同样的功能&#xff0c;提取文件夹内的文件信息更加灵活&#xff0c;只要选择对应的文件夹即可。实现效果操作方法&am…

机器信息MachineInfo

不管是业务功能需要还是开发诊断需要&#xff0c;经常需要用到CPU内存硬盘等信息&#xff0c;或者需要主板编号和系统编号做唯一设备标识。于是设计了机器信息类 MachineInfo &#xff0c;支持Windows、Linux、Raspberry等。Nuget包&#xff1a;NewLife.Core源码地址&#xff1…

学习 Python 编程的 19 个资源

编译&#xff1a;wzhvictor&#xff0c;英文&#xff1a;codecondo segmentfault.com/a/1190000004187319用Python编写代码一点都不难&#xff0c;事实上它一直被赞誉为最容易学的编程语言。如果你准备学习web开发&#xff0c; Python是一个不错的开始&#xff0c;甚至想做游戏…

1155低功耗cpu排行_比拼浮点运算速度,超算排行榜是这样“算”出来的

本报记者 过国忠 通 讯 员 梅国英 吴 婷6月17日&#xff0c;新一期全球超算500强榜单出炉&#xff0c;入选500强的所有超算浮点运算速度都突破每秒千万亿次&#xff0c;中国超算也在前四占有两席位置。普通计算机用指令运算速度衡量计算性能&#xff0c;而超算通常用浮点运算速…

使用 Tye 辅助开发 k8s 应用竟如此简单(五)

使用 Tye 辅助开发 k8s 应用竟如此简单&#xff08;一&#xff09;使用 Tye 辅助开发 k8s 应用竟如此简单&#xff08;二&#xff09;使用 Tye 辅助开发 k8s 应用竟如此简单&#xff08;三&#xff09;使用 Tye 辅助开发 k8s 应用竟如此简单&#xff08;四&#xff09;续上篇&a…

详解冒泡排序

转自&#xff1a;静默虚空http://www.cnblogs.com/jingmoxukong/p/4302718.html要点冒泡排序是一种交换排序。什么是交换排序呢&#xff1f;交换排序&#xff1a;两两比较待排序的关键字&#xff0c;并交换不满足次序要求的那对数&#xff0c;直到整个表都满足次序要求为止。算…

雪花算法Snowflake

雪花Id生成算法&#xff0c;是鼎鼎有名的分布式Id生成算法。它的优点在于&#xff0c;在分布式系统中快速生成有时间顺序的唯一编号&#xff01;Snowflake实测每秒可生成900万个唯一Id。Nuget包&#xff1a;NewLife.Core源码地址&#xff1a;https://github.com/NewLifeX/X/blo…

像小猪佩奇那样生活,需要多少钱?

每个有娃的家庭&#xff0c;几乎都有一个小猪佩奇的超级粉丝《小猪佩奇》&#xff08;又名《粉红猪小妹》&#xff09;史上最赚钱的英国学前电视动画片动画之一有网友从经济的角度算了笔账像佩奇一家那样生活需要多少钱呢&#xff1f;▼这是佩奇的家&#xff0c;视野相当不错的…

几何画板自定义工具_几何画板最强版 v5.06 中文版(含教程/实例/控件/打包机/工具集)...

相信还有很多地方的网课没有结束&#xff0c;前两天有小伙伴在后台留言求几何画板&#xff0c;这款软件大都收费&#xff0c;所以小软公然发到这里怕是不太稳妥&#xff0c;如果被删除就是被举报啦&#xff0c;需要的小伙伴速度下载保存~几何画板英文名&#xff1a;Sketchpad&a…

解惑3G业务

内容简介&#xff1a; 本书系统地介绍了第三代移动通信系统的业务&#xff0c;主要从业务概念、业务实现流程、关键技术、关键问题以及解决问题的思路几个角度进行介绍。本书内容包括&#xff1a;通信业务发展整体分析、3G的移动视频业务、基于SIP的移动“邀请”业务、移动位置…

Delphi 26 岁

喜欢就关注我们吧&#xff01;诞生于1995年的 Delphi 现在已经 26 岁了。1995年2月14日&#xff0c;Borland 公司推出了面向开发者的新工具——Delphi&#xff0c;旨在接替 DOS 时代盛行一时的 Turbo Pascal。说到这两款产品必然离不开它们的灵魂人物——Anders Hejlsberg&…

row number函数_Hive排名函数ROW_NUMBER,RANK 和 DENSE_RANK的区别

需求描述&#xff1a;分析最近三个月每天排名前30的邮箱收件数量。涉及到的表字段&#xff1a;发件时间&#xff0c;收件人。一、ROW_NUMBER表t查询出了3月每天不同类型邮箱收件量的降序排名&#xff0c;表t1通过ROW_NUMBER函数给每行数据添加序列号&#xff0c;select ROW_NUM…

边缘计算k8s集群之SuperEdge

什么是边缘计算边缘计算&#xff0c;是指在靠近物或数据源头的一侧&#xff0c;采用网络、计算、存储、应用核心能力为一体的开放平台&#xff0c;就近提供最近端服务。其应用程序在边缘侧发起&#xff0c;产生更快的网络服务响应&#xff0c;满足行业在实时业务、应用智能、安…

让你的系统移动起来

最近一直在捣鼓linux系统&#xff0c;听一大哥说想搞好它&#xff0c;最简单的方法就是经常用&#xff0c;用的久了也就自然简单了。。就跟我们用windows一样。。在linux系统里&#xff0c;我最喜欢的是Ubuntu。。个人感觉它做的还不错&#xff0c;有丰富的三方软件支持&#x…

简约而不简单的 Django 新手图文教程

来源&#xff1a;cizixssegmentfault.com/a/1190000008387882本文面向&#xff1a;有python基础&#xff0c;刚接触web框架的初学者。环境&#xff1a;windows7&#xff0c;python3.5.1&#xff0c;pycharm专业版&#xff0c;Django 1.10版&#xff0c;pip3一、Django简介百度百…