2016-09-18 41 views
2

我想从我的应用程序中将文本导出到MS OneNote并支持Office版本:2007,2010,2013和2016.我使用Microsoft.Office.Interop.OneNote.dll Version:12.0. 0,因为它随所有Office版本提供。使用C#导出到OneNote

问题是,当我尝试使用 “CreateNewPage” 我得到的例外创建的Office 2013一个新的OneNote页:

hrSectionReadOnly 0x8004200b

  • 的部分是只读。

我可以看到一个属性readOnly="true"我试图改变它,它没有帮助。仍然得到相同的例外。

如果我参考Microsoft.Office.Interop.OneNote.dll Version:15.0.0然后一切工作正常。

任何想法为什么它是只读的,我该如何克服这个问题?

下面是代码示例:

string strPath; 
string sectionId; 
string xml; 
// points directly on OneNote's Unfiled section 
_app.GetSpecialLocation(SpecialLocation.slUnfiledNotesSection, out strPath); 

_app.OpenHierarchy(strPath, "", out sectionId, CreateFileType.cftSection); 
_app.CreateNewPage(sectionId, out _sectionId, NewPageStyle.npsDefault); 

var strImportXml = @"<?xml version='1.0' ?> 
    <one:Page xmlns:one='" + _oneNoteNamespace + "' ID='" + _sectionId + @"'> 
     <one:Title> 
       <one:OE> 
         <one:T> 
          <![CDATA[ 
          ]]> 
         </one:T> 
       </one:OE> 
     </one:Title> 
     <one:Outline> 
       <one:Meta name='Rumba' content='" + new Random().Next() + @"' /> 
         <one:OEChildren> 
          <one:HTMLBlock> 
            <one:Data> 
              <![CDATA[My sample page]]> 
            </one:Data> 
           </one:HTMLBlock> 
         </one:OEChildren> 
     </one:Outline> 
    </one:Page>"; 

_app.UpdatePageContent(strImportXml, DateTime.MinValue); 
_app.NavigateTo(_sectionId, String.Empty, true); 

回答

0
private void ExportDataSetToOther(System.Data.DataTable dataTable, bool isActive) 
{ 
    string path = string.Empty; 
    var lines = new List<string>(); 
    if (isActive) 
    { 
     path = savingFileName.Remove(savingFileName.LastIndexOf('\\') + 1); 
     savingFileName = path + transactionName + DetailsOrSummary + (page + 1) +"."+ extention;// extention means .txt,.xlx,.one,.xlxs etc 
     isActive = false; 
     string[] columnNames = dataTable.Columns.Cast<DataColumn>(). 
            Select(column => column.ColumnName). 
            ToArray(); 

     var header = string.Join(",", columnNames); 
     lines.Add(header); 

     var valueLines = dataTable.AsEnumerable() 
          .Select(row => string.Join(",", row.ItemArray)); 
     lines.AddRange(valueLines); 

     File.WriteAllLines(savingFileName, lines); 
    } 
    else 
    { 
     var valueLines1 = dataTable.AsEnumerable() 
          .Select(row => string.Join(",", row.ItemArray)); 
     lines.AddRange(valueLines1); 

     File.AppendAllLines(savingFileName, lines); 

    } 

} 

检查文件是否处于活动状态,如果不活动,你可以与其他部分这样做的当前数据将退出值附加

+0

我不不想写新文件。我想使用Microsoft.Office.Interop.OneNote.dll版本:12.0.0并在现有OneNote文档中追加/创建页面。我已经用代码示例更新了这个问题(请参阅上文) – xbuster

+0

以追加可以使用File.AppendAllLines(savingFileName,请参阅上面编辑的代码行)的数据; –

+0

我将把编辑的代码作为第二个答案 –