2016-09-18 82 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

我將把編輯的代碼作爲第二個答案 –