问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用.net如何判断一个单元格是否为合并单元格

发布网友 发布时间:2022-05-13 21:59

我来回答

1个回答

热心网友 时间:2023-08-06 10:30

CODE:
//生成WORD程序对象和WORD文档对象
Microsoft.Office.Interop.Word.Application appWord = new Application();
Microsoft.Office.Interop.Word.Document doc = new Document();
object oMissing = System.Reflection.Missing.Value;//这个是什么东西,我始终没搞明白-_-
//打开模板文档,并指定doc的文档类型
object objTemplate = Server.MapPath(p_TemplatePath);
object objDocType = WdDocumentType.wdTypeDocument;
doc = (Document)appWord.Documents.Add(ref objTemplate, ref objFalse, ref objDocType, ref objTrue);
//获取模板中所有的书签
Bookmarks odf = doc.Bookmarks;
string[] testTableremarks = { "ApplyNo", "AuditingDate", "Auditor", "CheckDate", "Checker"};
string[] testTablevalues = { "ApplyNo", "AuditingDate", "Auditor", "CheckDate", "Checker",};
//循环所有的书签,并给书签赋值
for (int oIndex = 0; oIndex < testTableremarks.Length; oIndex++)
{
obDD_Name = WD + testTableremarks[oIndex];
doc.Bookmarks.get_Item(ref obDD_Name).Range.Text = p_TestReportTable.Rows[0][testTablevalues [oIndex]].ToString();//此处Range也是WORD中很重要的一个对象,就是当前操作参数所在的区域
}
//第四步 生成word,将当前的文档对象另存为指定的路径,然后关闭doc对象。关闭应用程序
object filename = Server.MapPath(p_SavePath) + "\\Testing_" + DateTime.Now.ToShortDateString() + ".doc";
object miss = System.Reflection.Missing.Value;
doc.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
object missingValue = Type.Missing;
object doNotSaveChanges = WdSaveOptions.wdDoNotSaveChanges;
doc.Close(ref doNotSaveChanges, ref missingValue, ref missingValue);
appWord.Application.Quit(ref miss, ref miss, ref miss);
doc = null;
appWord = null;
this.Hid_ShowMessage.Value = "生成成功!";

上述代码就是一个通过模板文件生成WORD的过程。其实也就是一个替换书签内容的过程。
在开发的过程中,有些数据是动态增加的,假如我要向一个表格中动态的添加几行数据,就无法用替换书签的方式来进行操作,需要通过程序在文档页面的表格中添加行。
向表格中添加行,有两种操作形式:一种是在WORD模板中已经存在了一个表格。一种是我们在程序中直接添加一个表格对象。
第一种情况下,需要注意:在WORD模板中要操作的表格中,不能有纵向合并的单元格,不然程序无法获取到当前要操作对象导致程序报错.单元格的合并,我们可以在程序中控制。
第二种情况下就需要我们通过程序去直接添加表格了。
生成表格的代码具体如下:
1.获取文档中已存在的表格:
Microsoft.Office.Interop.Word.Table characterTable = doc.Tables[2];//在document对象的集合操作中,起始点是从1开始,并不是从0开始的,此处需要注意。
2.在文档中直接生成表格,首先要获取插入表格的位置,然后添加表格对象:
object oEndOfDoc = "\\endofdoc";//WORD中预定义的书签,还有很多,此处就不一一列举。
object oMissing = System.Reflection.Missing.Value;
Range wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;//获取当前文档的末尾位置。
wrdRng.InsertAfter(" ");//插入一行,此处不能用 wrdRng.InsertAfter(""),如果用这个,就不能换行,我也不知道为什么。
object oCollapseEnd = Microsoft.Office.Interop.Word.WdCollapseDirection.wdCollapseEnd;
object oPageBreak = Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;//分页符
wrdRng.Collapse(ref oCollapseEnd);
wrdRng.InsertBreak(ref oPageBreak);//插入了一页
wrdRng.Collapse(ref oCollapseEnd);
wrdRng.InsertAfter("图片信息");
wrdRng.Font.Size = 20;//指定操作对象的文字大小
wrdRng.Font.Bold = 1;//指定操作对象的粗体:1为粗体,0为正常
wrdRng.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter;//指定操作区域的文字布局:居中对齐
//上述代码的意思是:找到当前的末尾位置,然后插入一个分页符,相当于跳到了一个新页,在这个新页的顶端写入文字“图片信息”,并指定文字大小为20,粗体居中显示。
wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
wrdRng.InsertAfter(" ");
wrdRng = doc.Bookmarks.get_Item(ref oEndOfDoc).Range;
wrdRng.InsertParagraphAfter();//插入一个段落,在此段落上插入一个2行一列的表格。
Microsoft.Office.Interop.Word.Table newTable = doc.Tables.Add(wrdRng, 2, 1, ref oMissing, ref oMissing);
我们还可以对表格进行格式设置,此处我们就不在一一列举。
3.下面我们分析一下对表格的单元格的操作:合并,拆分。这个就需要我们根据实际表格来进行操作:
//获取具体的某个单元格(1,1),获取第一行第一列的单元格
Cell cell = doc.Tables[1].Cell(1,1);
cell.Range.Text="Text";//指定当前单元格的内容为Text
在Table的操作中,添加新行:
object beforeRow = doc.Tables[1].Rows[2];//此行是先获取到第二行
doc.Tables[1].Rows.Add(ref beforeRow);//效果类似于在WORD中此表格的第二行上进行【插入行】操作,插入的新行将会插入到当前行的上一行中,格式也是和此行一致的。
//合并单元格:感觉在此处合并单元格挺傻瓜的,你只需要指定你要合并的起始单元格和结束单元格,然后通过Merge操作就行了
Cell cell = doc.Tables[1].Cell(iRow, 2);//列合并
cell.Merge(doc.Tables[1].Cell(iRow, 6));
Cell cell1 = doc.Tables[1].Cell(iRow - 1, 1);//行合并
cell1.Merge(doc.Tables[1].Cell(iRow + 1, 1));
上述操作就是在此程序中用到的一些知识点,还有好多的东西需要去熟悉、理解。
另外,在程序的测试过程中发现,当执行一次文档生成后,在资源管理器中始终有winword.exe进程杀不掉,目前的解决办法是:直接杀进程,代码如下:
protected void killAllProcess() // 杀掉所有winword.exe进程
{
System.Diagnostics.Process[] myPs;
myPs = System.Diagnostics.Process.GetProcesses();
foreach (System.Diagnostics.Process p in myPs)
{
if (p.Id != 0)
{
string myS = "WINWORD.EXE" + p.ProcessName + " ID:" + p.Id.ToString();
try
{
if (p.Moles != null)
if (p.Moles.Count > 0)
{
System.Diagnostics.ProcessMole pm = p.Moles[0];
myS += "\n Moles[0].FileName:" + pm.FileName;
myS += "\n Moles[0].MoleName:" + pm.MoleName;
myS += "\n Moles[0].FileVersionInfo:\n" + pm.FileVersionInfo.ToString();
if (pm.MoleName.ToLower() == "winword.exe")
p.Kill();
}
}
catch
{ }
finally
{
}
}
}
}

目前为止,一个WORD文档就生成了。上述为我在这个程序开发中遇到的问题和解决方法,可能有好多地方都是考虑不全的,如果在程序开发中对WORD的操作有新的认识的话,欢迎和我沟通交流,彼此提高!
下边是在网上一些比较好的摘抄:
创建新Word
object oMissing = System.Reflection.Missing.Value;
Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);

打开文档:
object oMissing = System.Reflection.Missing.Value;
Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
object fileName = @"E:CCCXCXXTestDoc.doc";
oDoc = oWord.Documents.Open(ref fileName,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing,
ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

导入模板
object oMissing = System.Reflection.Missing.Value;
Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
object fileName = @"E:XXXCCXTest.doc";
oDoc = oWord.Documents.Add(ref fileName, ref oMissing,
ref oMissing, ref oMissing);

.添加新表
object oMissing = System.Reflection.Missing.Value;
Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
object start = 0;
object end = 0;
Word.Range tableLocation = oDoc.Range(ref start, ref end);
oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);

.表插入行
object oMissing = System.Reflection.Missing.Value;
Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
object start = 0;
object end = 0;
Word.Range tableLocation = oDoc.Range(ref start, ref end);
oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
Word.Table newTable = oDoc.Tables[1];
object beforeRow = newTable.Rows[1];
newTable.Rows.Add(ref beforeRow);

.单元格合并
object oMissing = System.Reflection.Missing.Value;
Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
object start = 0;
object end = 0;
Word.Range tableLocation = oDoc.Range(ref start, ref end);
oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
Word.Table newTable = oDoc.Tables[1];
object beforeRow = newTable.Rows[1];
newTable.Rows.Add(ref beforeRow);
Word.Cell cell = newTable.Cell(1, 1);
cell.Merge(newTable.Cell(1, 2));

.单元格分离
object oMissing = System.Reflection.Missing.Value;
Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
oDoc = oWord.Documents.Add( oMissing,
ref oMissing, ref oMissing);
object start = 0;
object end = 0;
Word.Range tableLocation = oDoc.Range(ref start, ref end);
oDoc.Tables.Add(tableLocation, 3, 4, ref oMissing, ref oMissing);
Word.Table newTable = oDoc.Tables[1];
object beforeRow = newTable.Rows[1];
newTable.Rows.Add(ref beforeRow);
Word.Cell cell = newTable.Cell(1, 1);
cell.Merge(newTable.Cell(1, 2));
object Rownum = 2;
object Columnnum = 2;
cell.Split(ref Rownum, ref Columnnum);

通过段落控制插入
object oMissing = System.Reflection.Missing.Value;
object oEndOfDoc = "\endofdoc"; /**//* endofdoc is a predefined bookmark */
//Start Word and create a new document.
Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;
oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
ref oMissing, ref oMissing);
//Insert a paragraph at the beginning of the document.
Word.Paragraph oPara1;
oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
oPara1.Range.Text = "Heading 1";
oPara1.Range.Font.Bold = 1;
oPara1.Format.SpaceAfter = 24; //24 pt spacing after paragraph.
oPara1.Range.InsertParagraphAfter();
winform .net开发,表头合并单元格的问题

上方是很多label控件组合而成的表头。中间的datagridview列和上面label做出来的列对齐。也就是,列宽不能改变,不然就走样了。下方就是一个tablelayoutpanel。

在ASP.NET中如何合并单元格?

具体实现方法主要是通过rowspan和colspan,最初添加一个label控件,里面加一个table:Label.Text = "类别难度系数课程名称课程代码学分总学时数按学期周课时分配理论实验实习一二三四五六七八"

C#.net DataGridView 合并表头单元格

//只有签卡姓名、部门、机构需合并单元格 if (j != 0 &amp;&amp; j != 1 &amp;&amp; j != 2 &amp;&amp; j != 3 &amp;&amp; j != 4 &amp;&amp; j != 5){ //接收第一行中单元格的值 gvText = gvManualSign.Rows[0].Cells[j].Text;//第一行单元格的合并为1 gvManualSign.Rows[0].Cells[j].RowSpan = 1;nextC...

怎样用javascript判断Excel的单元格是否为合并单元格

alert("不是合并单元格");

...实现了合并单元格,现在如何将合并的单元格还原回去

HTML的TD元素有一个colspan属性,你用JS把它设为1

vb.net那个控件的属性可以合并单元格,合并后显示在界面上然后汇出exce...

其实程序设计,主要是依据二维表,超出的二维表的部分,个人认为考虑的因素太多了;

asp.net,gridview在设置链接的时候,用到合并单元格的方法时会出现错误...

TableCell _temptablecell = null;这个TableCell没有实例 所以导致 _temptablecell.RowSpan 调用方法的时候有错

EXT.NET GridPanel 合并单元格怎么实现

每一列定义一个 Editor 双击的时候 弹出 这个控件 可以定义很多控件 比如combox等 &lt;/ext:Column&gt; ...&lt;Plugins&gt;&lt;ext:RowEditorrunat="server"SaveText="Update"/&gt;&lt;/Plugins&gt; &lt;/ext:gridpanel&gt; 总结: ext.net自带很多 你想得到 的功能 他封装好了 给你这样的实例 你看一下 http://examples...

在excel表格中,由于它有很多个合并单元格,请问我应该怎样在这个表中进行...

笔者在网上搜索到的网友给的公式均是第一个单元格不是合并单元格,之后的单元格出现合并单元格,操作与“一”相同;在这里不再做说明。2.jpg (6.02 KB)6 2011-4-16 01:43 笔者在解决表格问题时候,考虑到从第一格开始就有合并单元格,经过笔者尝试上述方法就行不通了,公式则需要作出更改。1....

如何向Word中写入数据,C#.net

//合并单元格 newTable.Cell(1, 1).Merge(newTable.Cell(1, 3)); WordApp.Selection.Cells.VerticalAlignment = Word.WdCellVerticalAlignment.wdCellAlignVerticalCenter;//垂直居中 WordApp.Selection.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;//水平居中 //填充表格内容 newTabl...

excel判断是否为合并单元格 如何判断合并单元格所属的范围 npoi判断合并单元格 如何识别合并单元格 合并单元格只能一个 vba判断合并单元格 qt表格合并单元格 excel提取合并单元格的行数 vba合并有几个单元格
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
文档文件夹可以删除吗? 文件夹中的文件能删除吗? 吃鸡进不去,重启也没用,开了加速器,如图 永劫无间用什么加速器好 好用的加速器推荐 PUBG加速器免费试用 亚服加速器推荐 吃鸡加速器选择 亚服国际服吃鸡加速器推荐 东芝2523ad提示维护怎么清除 请问清朝历皇帝顺序,开国皇帝到最后一个。还有就是年羹尧的妹妹叫什么... 这个外国小女孩是谁?附图 vs.net2005 中word 打印问题? 鸿门宴 发展和高潮,怎么叙述? 讲述鸿门宴的经过,并给每个情节拟一个标题 具体而又清晰的介绍鸿门宴的过程 为什么现在结婚都要买房子? 结婚前必须考虑的30个问题结婚前买房子,女友对于写名子问题有疑虑,我父母出的钱买房子,写父母的名子_百度问一问 跟女朋友结婚了,房子该买吗? 结婚买新房是应该男方拿钱还是男女双方各拿一半? 关于买房子结婚的事? 新婚必看!夫妻共同买房需要注意哪些问题 结婚买房子的问题 国内现在很多人结婚都会考虑房子的问题,这是附加条件还是必备基础? 结婚买房子问题? 关于结婚买房子的问题? 有关古代恐龙的问题 怪物猎人边境 棘龙 怪物猎人OL中有那些新加的怪物? 新车必须投划痕险么 风蒸发水的过程是怎样的? 水蒸发的条件 提问人不犯我我不犯人,人若犯我我必犯人。这句话是什么意思 ? 哺乳期可以使用俏美韵吗? 人不犯我,我不犯人;人若犯我,礼让三分;人再犯我,我还一针;人还犯我,斩草除根。 是什么意思_百度问一问 哺乳期能用素颜霜吗 唯蜜瘦哺乳期能用吗有副作用吗 h型吊坠是什么品牌 一个椭圆中间一横是什么牌子的项链 人不犯我我不犯人是什么意思 吊坠上刻hs925是什么意思 周大生72分钻石吊坠不是八箭八心,怎么会这样?还3万多,买亏了吧?si净度,h色泽。 买了个pd950 myh的吊坠,PT2个字母吊坠上显示不清楚,是真的铂金吗?还有MYH是什么意思?哪位大侠知道麻烦 天津市德善殡葬礼仪服务中心怎么样? 天津殡葬 怎么制作篮球视频 我想开一家殡葬礼仪服务公司,该从哪里入手 法、法律、律法、法典、法律体系的概念是什么,以及相互之见的联系与区别? 大陆法系和英美法系的法律结构有什么不同 中国法律体系属于哪个法系 街头篮球怎么剪视频 英美法系和大陆法系两大法系的区别