<?xml version="1.0" encoding="UTF-8"?>
<helpdocument version="1.0">
	
<!--***********************************************************
 * 
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 * 
 ***********************************************************-->


 
	
<meta>
      <topic id="textswriterguidetextdoc_inframexml" indexer="include" status="PUBLISH">
         <title xml-lang="en-US" id="tit">Inserting an Entire Text Document</title>
         <filename>/text/swriter/guide/textdoc_inframe.xhp</filename>
      </topic>
   </meta>
   <body>
<bookmark xml-lang="en-US" branch="index" id="bm_id3155185"><bookmark_value>sections;inserting external content</bookmark_value>
      <bookmark_value>text documents;merging</bookmark_value>
      <bookmark_value>links;inserting text documents as</bookmark_value>
      <bookmark_value>inserting;text documents</bookmark_value>
</bookmark><comment>mw deleted "text;"</comment>
<paragraph xml-lang="en-US" id="hd_id3155185" role="heading" level="1" l10n="U"
                 oldref="23"><variable id="textdoc_inframe"><link href="text/swriter/guide/textdoc_inframe.xhp" name="Inserting an Entire Text Document">Inserting an Entire Text Document</link>
</variable></paragraph>
      <paragraph xml-lang="en-US" id="hd_id1812799" role="heading" level="2" l10n="NEW">To Insert a Text File</paragraph>
      <list type="ordered">
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3155855" role="listitem" l10n="U" oldref="28">Place the cursor in the document where you want to insert the file.</paragraph>
         </listitem>
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3147412" role="listitem" l10n="U" oldref="30">Choose <emph>Insert - File</emph>.</paragraph>
         </listitem>
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3149839" role="listitem" l10n="U" oldref="31">Locate the text document that you want to insert, and then click <emph>OK</emph>.</paragraph>
         </listitem>
      </list>
      <paragraph xml-lang="en-US" id="par_id3148858" role="paragraph" l10n="U" oldref="32">The contents of the text document are embedded into the current document and are not updated if the source file is changed. If you want the contents to automatically update when you change the source document, insert the file as a link.</paragraph>
      <paragraph xml-lang="en-US" id="hd_id3156105" role="heading" level="2" l10n="U"
                 oldref="33">To Insert an Entire Text Document as a Link</paragraph>
      <list type="ordered">
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3150096" role="listitem" l10n="U" oldref="34">Place the cursor in the document where you want to insert the file.</paragraph>
         </listitem>
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3153404" role="listitem" l10n="U" oldref="35">Choose <emph>Insert - Section</emph>.</paragraph>
         </listitem>
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3153127" role="listitem" l10n="U" oldref="36">Type a name in the <emph>New Section</emph> box, and then select the <emph>Link</emph> check box.</paragraph>
         </listitem>
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3149642" role="listitem" l10n="U" oldref="37">In the <item type="menuitem">File Name</item>
               <emph/>box, type the name of the file that you want to insert, or click the browse button (<item type="menuitem">...</item>) and locate the file.</paragraph>
            <paragraph xml-lang="en-US" id="par_id3149968" role="listitem" l10n="U" oldref="38">If the target text document contains sections, you can select the section that you want to insert in the<emph/>
               <item type="menuitem">Sections</item> box.</paragraph>
         </listitem>
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3149619" role="listitem" l10n="U" oldref="39">If you want, set the formatting options for the section.</paragraph>
         </listitem>
         <listitem>
            <paragraph xml-lang="en-US" id="par_id3149862" role="listitem" l10n="U" oldref="40">Click <emph>Insert</emph>.</paragraph>
         </listitem>
      </list>
      <paragraph xml-lang="en-US" id="par_id3145099" role="paragraph" l10n="U" oldref="41">$[officename] automatically updates the contents of the inserted section whenever the source document is changed. To manually update the contents of the section, choose <emph>Tools - Update - Update All</emph>.</paragraph>
      <embed href="text/shared/00/00000004.xhp#related"/>
      <embed href="text/swriter/guide/text_frame.xhp#text_frame"/>
   </body>
</helpdocument>