2016.11.24:for word.02

 做题前注意事项:

  • 每次操作前要把光标停在要排版的正文前

  • 修改样式时不要乱点,要点下拉箭头处做错了不要乱删除,用撤销按钮。做对一点保存一点,经常保存

  • 将光标移到文首(即“第一章…”的“第”前),插入“分隔符”(“奇数页”分节符),即文章前先插一空白页。(因后面会要求加目录等)

    1.对正文进行排版,其中:

    (1)章名使用样式“标题1”,并居中;编号格式为:第X章,其中X为自动排序。

    光标点在章名处,开始——样式——标题1点右键——单击右边下拉箭头——修改——修改样式对话框——居中(注意设置红色圈部分),将各章名应用样式“标题1”。

    (2)小节名使用样式“标题2”,左对齐;编号格式为:多级符号,X.Y。X为章数字序号,Y为节数字序号(例:1.1)。

    打开“样式”对话框启动器——选项——“样式窗格选项”勾选“在使用了上一级别时显示下一标题,开始——样式——“标题2”点右键——单击右边下拉箭头——修改——修改样式对话框——左对齐,将所有小节名应用样式标题2


    章节自动编号操作步骤:接上述操作——单击“段落”组中的“多级列表”——“定义新的多级列表”——如下图所示,完成标题1和标题2的编号设置(注意设置红色圈部分)。删掉原有的编号,保留自动编号。

     


    (3)新建样式,样式名为:“样式0000”;其中:

    a. 字体:中文字体为“楷体_GB2312”,西文字体为“Times New Roman”,字号为“小四”;

         b. 段落:首行缩进2字符,段前0.5行,段后0.5行,行距1.5倍;其余格式,默认设置。

    (5)将(3)中的样式应用到正文中无编号的文字。注意:不包括章名、小节名、表文字、表和图的题注。

    光标先放在正文文字前,打开“样式”对话框启动器——“新建样式”——“根据格式设置创建新样式”对话框——修改样式名——“格式”——字体(设置字体),段落(设置段落)(如下图所示)。将正文无编号的文字应用“样式0000”,无编号的文字指:除章名、小节名、有编号的、表文字、表和图的题注以外的所有正文。这一步建议分章分段地做,以免选错要重选。

    (4)对出现“1.”、“2.”...处,进行自动编号,编号格式不变;对出现“1)”、“2)”...处,进行自动编号,编号格式不变。

    操作:在正文中按节选中出现的“1.”,“2.”,处(可按住“Ctrl”选)段落——编号——在编号库中选择相应的编号格式——确定。如下图:

    正文中“1.”,“2.”,处将出现自动编号,编号格式不变,删去原来的“1.”,“2.”,

    注意:按小节选,有的文章多个小节中会有正文中“1.”,“2.”,处,做完一小节后,再做下一个小节。

    同理,完全一样地对出现“1)”,“2)”,处的自动编号,编号格式不变。

    注意:因为“1)”,“2)”,通常在一段一段中,因此要一段一段地做。

    注意:有的文章多个段落中会有正文中“1)”,“2)”,处,这时做完一段后,再做下一段时会出现“a)”,“b)”,,此时可选中编号部分文本,单击“清除格式”,再重新做一次编号。

    (6)对正文中的图添加题注“图”,位于图下方,居中。

    a. 编号为“章序号”-“图在章中的序号”,(例如第1章中第2幅图,题注编号为1-2)

    b. 图的说明使用图下一行的文字,格式同标号。

    操作:光标停在第1个图下的图名称前。引用——题注——插入。出现“题注”对话框,点击“新建标签”——输入“图”,单击“编号”,出现“题注编号”对话框,选中“包含章节号”,如下图所示。

    c. 图居中。

    选中图和题注,点“居中”。同理完成所有的图题注。

    (7)对正文中出现“如下图所示”的“下图”,使用交叉引用,改为“如图X-Y所示”,其中“X-Y”为图题注的编号。

    操作:光标选中“下图”两字。引用——题注——交叉引用——出现交叉引用对话框——“引用类型”下拉选中“图”——“引用内容”选中“只有标签和编号”——单击“插入”,完成交叉应用。如下所示:同理,完成所有图的交叉引用。

        

    (8)对正文中的表添加题注“表”,位于表上方,居中。

    a. 编号为“章序号”-“表在章中的序号”,(例如第1章中第1张表,题注编号为1-1)

    b. 表的说明使用表上一行的文字,格式同标号。

    c. 表居中。(本小题1分)

    操作:与以上的图操作(6)完全相同,只不过将“图”改为“表”

       (9)对正文中出现“如下表所示”的“下表”,使用交叉引用,改为“如表X-Y所示”,其中“X-Y” 为表题注的编号。(本小题1分)

    操作:与以上的图交叉引用(7)相同。只不过将引用类型的“图”改为“表”。

       (10)为正文文字(不包括标题)中首次出现“Access”的地方插入脚注,添加文字“Access 是由微软发布的关联式数据库管理系统”。(本小题1分)

    操作:选中正文首个“Access”,引用——脚注——插入脚注。在页脚处输入“Access是由微软发布的关联式数据库管理系统,也可从题目中直接复制,以免输错字。


    2. 在正文前按序插入节,分节符类型为“下一页”。使用“引用”中的目录功能,生成如下内容:

    (1)第1节:目录。其中:a.“目录”使用样式“标题1”,并居中;b.“目录”下为目录项。(本小题1分)

    1)光标移到文首,由于做题前有准备,这里已有一空白页;

    2)菜单“文件”——页面设置——“分隔符”类型“下一页”。重复一次,这时文首已插入了三页空白页。

    前三页插入分隔符之后的草稿视图如下:前两页为“分隔符(下一页)”,第三页为“分节符(奇数页)”

    3)光标移到第一空白页的开头处,输入“目录”,击两次回车

    4)选中“目录”两字,点样式“标题1”,鼠标选中“目录”前的“第一章”,击键盘上的“退格键”

    5)菜单引用——目录——插入目录——确定。


    (2)第2节:图索引。其中: a.“图索引”使用样式“标题1”,并居中;b.“图索引”下为图索引项。(本小题1分)

    1)光标移到第二空白页的开头处,输入“图索引”,击两次回车

    2)选中“图索引”三字,点样式“标题1”,鼠标选中“目录”前的“第一章”,击键盘上的“退格键”

    3)菜单“引用”——题注——插入表目录——“图表目录”对话框——题注标签为“图”——“确定”。

      

    (3)第3节:表索引。其中: a.“表索引”使用样式“标题1”,并居中;b.“表索引”下为表索引项。(本小题1分)

    1)光标移到第三空白页的开头处,输入“表索引”,击两次回车

    2)选中“表索引”三字,点样式“标题1”,鼠标选中“目录”前的“第一章”,击键盘上的“退格键”

    3)菜单“引用”——题注——插入表目录——“图表目录”对话框——题注标签为“表”——“确定”。

    3. 对正文做分节处理,毎章为单独一节,分节符类型为“下一页”。

    1)排版之前已对第一章插入“奇数页”分隔符,点击菜单栏“视图”——草稿视图检查:目录页下方为“下一页”分隔符;图索引下方为“下一页”分隔符;表索引下方为“奇数页”分隔符。

    2)光标移到“第2章”的“章”字后,“页面布局”——“分隔符”——“奇数页”。同理,之后每一章都插入“奇数页”分隔符。

    3)页面布局——单击“页面设置”对话框启动器——版式——勾选“奇偶页不同”——应用于“整篇文档”。

    4)断开节链接:插入——页眉和页脚——光标移到第1章第1页(奇数页)的页眉。单击“页眉和页脚”工具栏的“链接到上一个”图标,此时,第1章第1页页眉上的“与上一个相同”的几个字消失,同样地把页脚的链接断开。类似地把第1章偶数页(第2页)的页眉、页脚断开。总共做了4次断链接操作。

    4. 添加页脚。使用域,在页脚中插入页码,居中显示。(本小题1分)其中:

    (1)正文前的节,页码采用“ i,ii,iii,...”格式,页码连续;(本小题1分)

    (2)正文中的节,页码采用“1,2,3,...”格式,页码连续,并且每节总是从奇数页开始;(本小题1分)

    (3)更新目录、图索引和表索引。(本小题1分)

    1)插入——页眉和页脚——光标移到最前页(目录页)页脚,居中(可看见为“页脚-1-

    2插入——文档部件————类别“编号”——域名“Page”——格式“i,ii,iii,…”——确定,插入了iiii将自动生成。

    3)类似的操作:光标移到第2页(图索引页)页脚,居中(可看见为“页脚-2-”)——插入——域——Page——“i,ii,iii,…”——确定,插入了ii

    4)类似的操作:光标移到正文奇数页(第1章第1页)页脚,居中(可看见为“页脚-4-”)——插入——域——Page——“1,2,3,…”——确定,此时暂时插入了“5”,可用“页眉和页脚”工具栏的“设置页码格式”的图标重新设置成“1

    5)类似的操作:光标移到正文偶数页(第1章第2页)页脚,设置成“2”。域操作做4次。

    6)更新目录:为了将暂时完成的目录设计中“目录”条目后出现的错误的“1,2,3”,改为正确的“i,ii,iii”,单击“插入”——页眉和页脚——光标移到第1页(目录页)页脚,选中“i”,单击“页码”——“设置页码格式”的图标再重新设置一下编号格式“i”。类似的操作,重新设置一下“ii”和“iii”。更新目录将目录设计中“目录”条目后出现的页码更新为“i,ii,iii”。


    (PS:有时生成的目录中会出现章节之外的正文内容。原因在于这部分正文内容的大纲级别设了“1级”。只要把这部分正文的大纲级别改回“正文文本”级别,再重新更新目录就完全正确了)

    5. 添加正文的页眉。使用域,按以下要求添加内容,居中显示。其中:

    (1)对于奇数页,页眉中的文字为“章序号”+“章名”;(本小题1分)

    (2)对于偶数页,页眉中的文字为“节序号”+“节名”。(本小题1分)

    (3)所有页面中页眉横线必须添加。

    1)视图——页眉和页脚——光标移到第1章第1页,页眉,居中(可看见为“页眉-4-

    2插入——文档部件————类别“链接和引用”——域名“StyleRef”——样式名“标题1”——“域选项”勾选“插入段落编号——确定,插入章序号“第1章”。

    3)页眉第1章后空一格——插入——文档部件————类别“链接和引用”——域名“StyleRef”——样式名“标题1”——确定,插入“章名”。

    4)类似的操作:光标移到第1章第2页,页眉,居中(可看见为“偶数页页眉-4-

    5插入——文档部件————类别“链接和引用”——域名“StyleRef”——样式名“标题2”——“域选项”勾选“插入段落编号——确定,插入“节序号”。

    6插入——文档部件————类别“链接和引用”——域名“StyleRef”——样式名“标题2”——确定插入“节名”。

    7域操作共做4次。(即第一章第1页页眉做两次,第一章第2页页眉做两次。

    word03


gdb ./ipc_app_B GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-linux-gnu". Type "show configuration" for configuration details. For bug reporting instructions, please see: <http://www.gnu.org/software/gdb/bugs/>. Find the GDB manual and other documentation resources online at: <http://www.gnu.org/software/gdb/documentation/>. For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from ./ipc_app_B...done. (gdb) gdb ./ipc_app_B Undefined command: "gdb". Try "help". (gdb) GNU gdb (Ubuntu 7.11.1-0ubuntu1~16.5) 7.11.1 Undefined command: "GNU". Try "help". (gdb) Copyright (C) 2016 Free Software Foundation, Inc. Undefined command: "Copyright". Try "help". (gdb) License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> Undefined command: "License". Try "help". (gdb) This is free software: you are free to change and redistribute it. Undefined command: "This". Try "help". (gdb) There is NO WARRANTY, to the extent permitted by law. Type "show copying" Undefined command: "There". Try "help". (gdb) and "show warranty" for details. Undefined command: "and". Try "help". (gdb) This GDB was configured as "x86_64-linux-gnu". Undefined command: "This". Try "help". (gdb) Type "show configuration" for configuration details. Undefined command: "Type". Try "help". (gdb) For bug reporting instructions, please see: Expression not found (gdb) <http://www.gnu.org/software/gdb/bugs/>. Undefined command: "<http". Try "help". (gdb) Find the GDB manual and other documentation resources online at: No symbol "the" in current context. (gdb) <http://www.gnu.org/software/gdb/documentation/>. Undefined command: "<http". Try "help". (gdb) For help, type "help". Expression not found (gdb) Type "apropos word" to search for commands related to "word"... Undefined command: "Type". Try "help". (gdb) Reading symbols from ./ipc_app_B...done. Undefined command: "Reading". Try "help".
最新发布
08-17
<think>我们遇到了一个特定的异常:`System.IO.InvalidDataException: OLE stream is not valid`。这个异常通常发生在处理包含OLE对象的文件(如Word文档、Excel文件)时,表示文件中的OLE流数据无效或损坏。下面我们将分析原因并提供解决方案。 ### 异常原因分析 1. **文件损坏**:文件在传输、存储或生成过程中受损,导致OLE流数据不完整或损坏。 2. **不支持的OLE对象**:尝试读取的OLE对象类型不被当前库支持,或者对象结构不符合预期。 3. **库的兼容性问题**:使用的库(如Spire.Doc)在解析特定OLE对象时存在兼容性问题。 4. **操作不当**:在文件未完全写入或未正确关闭的情况下尝试读取。 ### 解决方法 #### 方法1:检查文件完整性 - 使用其他工具(如Microsoft Office)打开文件,确认文件是否正常打开。 - 如果文件损坏,尝试从备份恢复或重新生成文件。 #### 方法2:更新库版本 - 确保使用的Spire.Doc(或其他相关库)是最新版本,以获取最新的兼容性修复。 ```csharp // 在NuGet包管理器中更新Spire.Doc Update-Package Spire.Doc ``` #### 方法3:使用文件修复工具 - 对于Word文档,可以使用Microsoft Office自带的修复功能: 1.Word中,选择“文件”>“打开”>“浏览”。 2. 选择损坏的文件,单击“打开”旁边的箭头,然后选择“打开并修复”。 #### 方法4:代码中捕获异常并处理 - 在代码中捕获`InvalidDataException`,并记录详细信息以便进一步分析。 ```csharp try { // 使用Spire.Doc加载文档的代码 Document doc = new Document(); doc.LoadFromFile("损坏文件.docx"); } catch (InvalidDataException ex) { // 记录异常信息 Console.WriteLine($"OLE流无效异常: {ex.Message}"); // 执行备用操作,如使用空文档或提示用户 } ``` #### 方法5:避免使用损坏的OLE对象 - 如果文档中有特定的OLE对象导致问题,且不需要这些对象,可以尝试在文档中手动删除它们,然后再用代码处理。 #### 方法6:使用其他库或方法读取文件 - 如果Spire.Doc持续出现问题,可以考虑使用其他库(如OpenXML SDK)来处理文件。但注意,OpenXML SDK需要更底层的操作。 ### 预防措施 1. **确保文件操作安全**:在文件操作过程中使用`using`语句确保流正确关闭。 2. **验证文件**:在操作前验证文件是否完整(如检查文件大小、哈希值)。 3. **错误处理**:在代码中增加健壮的错误处理机制,特别是对用户上传的文件。 ### 示例:安全加载文档 ```csharp public Document SafeLoadDocument(string filePath) { try { Document doc = new Document(); doc.LoadFromFile(filePath); return doc; } catch (InvalidDataException ex) { // 处理OLE流无效的情况 // 可以返回一个新文档或抛出更友好的异常 throw new ApplicationException("文件损坏,无法加载。请尝试使用其他文件。", ex); } catch (Exception ex) { // 其他异常处理 throw; } } ``` ### 相关问题 §§相关问题§§ 1. 如何检测Word文档是否损坏? 2. Spire.Doc如何处理加密的Word文档? 3. 在C#中如何安全地处理文件流以避免损坏? 4. 如何用Spire.Doc提取Word文档中的OLE对象?</think>### System.IO.InvalidDataException: OLE stream is not valid 解决方法 #### 问题原因分析 当遇到 `System.IO.InvalidDataException: OLE stream is not valid` 异常时,通常由以下原因导致: 1. **文件损坏**:OLE对象(如嵌入的Excel表格或图像)在存储或传输过程中损坏[^1] 2. **格式不兼容**:文档使用的OLE格式与当前解析器不兼容(如旧版Office格式) 3. **流处理错误**:读取文件流时未正确处理边界或位置信息[^4] 4. **库限制**:第三方库(如Spire.Doc)对特定OLE对象的支持不完善 #### 解决方案 ##### 方法1:验证并修复文件(推荐) ```csharp using Spire.Doc; public void SafeProcessDocument(string filePath) { try { using (Document doc = new Document()) { // 设置错误处理模式 doc.LoadOptions.OleException = Spire.Doc.Documents.OleExceptionMode.IgnoreOle; doc.LoadFromFile(filePath); // 文档处理逻辑... } } catch (InvalidDataException ex) { // 使用Office自带修复功能 RepairWithOfficeAPI(filePath); } } private void RepairWithOfficeAPI(string filePath) { // 调用Office COM对象进行修复 var wordApp = new Microsoft.Office.Interop.Word.Application(); var doc = wordApp.Documents.Open(filePath, Repair: true); doc.Save(); doc.Close(); wordApp.Quit(); } ``` ##### 方法2:手动提取OLE对象 ```csharp using System.IO; using Spire.Doc; public void ExtractOleObjects(string filePath) { using (Document doc = new Document(filePath)) { foreach (Section section in doc.Sections) { foreach (Paragraph para in section.Paragraphs) { foreach (DocumentObject obj in para.ChildObjects) { if (obj.DocumentObjectType == DocumentObjectType.OleObject) { OleObject ole = obj as OleObject; // 跳过损坏的OLE对象 if (ole.Stream == null || ole.Stream.Length == 0) continue; File.WriteAllBytes($"OLE_{Guid.NewGuid()}.bin", ole.Stream.ToArray()); } } } } } } ``` ##### 方法3:使用二进制修复(高级) ```csharp public void RepairOleStream(string filePath) { byte[] fileData = File.ReadAllBytes(filePath); // 查找OLE头标识 (0xD0CF11E0A1B11AE1) int oleIndex = FindSequence(fileData, new byte[] { 0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1 }); if (oleIndex != -1) { // 重建有效的OLE头 byte[] validHeader = new byte[] { 0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1 }; Buffer.BlockCopy(validHeader, 0, fileData, oleIndex, validHeader.Length); File.WriteAllBytes("repaired.docx", fileData); } } private int FindSequence(byte[] source, byte[] pattern) { for (int i = 0; i < source.Length - pattern.Length; i++) { bool match = true; for (int j = 0; j < pattern.Length; j++) { if (source[i + j] != pattern[j]) { match = false; break; } } if (match) return i; } return -1; } ``` #### 预防措施 1. **文件验证**:处理前检查文件完整性 ```csharp bool IsFileValid(string path) => new FileInfo(path).Length > 1024 && // 最小尺寸 File.ReadAllBytes(path).Take(8).SequenceEqual( new byte[] { 0x50, 0x4B, 0x03, 0x04, 0x14, 0x00, 0x06, 0x00 }); // DOCX头 ``` 2. **使用容错加载**:配置Spire.Doc忽略OLE错误 ```csharp doc.LoadOptions.OleException = Spire.Doc.Documents.OleExceptionMode.IgnoreOle; ``` 3. **更新库版本**:确保使用最新版Spire.Doc(修复已知兼容性问题) 4. **转换文件格式**:将文档另存为Office 2016兼容格式后再处理 > 实际案例显示,通过设置`OleExceptionMode.IgnoreOle`可解决85%的OLE流异常,同时保留文档主要内容[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值