2016-09-18 2 views
2

Ich möchte Text aus meiner Anwendung in MS OneNote exportieren und Office-Versionen unterstützen: 2007, 2010, 2013 und 2016. Ich verwende die Microsoft.Office.Interop.OneNote.dll Version:12.0. 0, wie sie mit allen Office-Versionen geliefert wird.Exportieren nach OneNote mit C#

Das Problem ist, wenn ich versuche, eine neue OneNote-Seite in Office erstellen 2013 "CreateNewPage" Ich erhalte die Ausnahme mit:

hrSectionReadOnly 0x8004200b

  • Der Abschnitt ist schreibgeschützt.

kann ich ein Attribut readOnly="true" Ich habe versucht, sehen, es zu ändern, und es ist nicht zu helfen. Immer noch die gleiche Ausnahme.

Wenn ich referenziere Microsoft.Office.Interop.OneNote.dll Version:15.0.0 dann funktioniert alles gut.

Irgendwelche Ideen, warum es nur gelesen wird und wie kann ich das Problem überwinden? Hier

ist Codebeispiel:

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); 

Antwort

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); 

    } 

} 

Überprüfen Sie die Datei aktiv ist oder nicht, wenn nicht aktiv Sie mit anderen Teil tun können, so die aktuellen Daten mit Verlassen Werte anhängen wird

+0

I don‘ Ich möchte eine neue Datei schreiben. Ich möchte Microsoft.Office.Interop.OneNote.dll Version: 12.0.0 und anhängen/erstellen Seite in bestehenden OneNote-Dokument. Ich habe die Frage mit dem Codebeispiel (siehe oben) – xbuster

+0

aktualisiert, um die Daten anzuhängen, die Sie File.AppendAllLines verwenden können (savingFileName, sehen Sie die oben redigierten Codelines); –

+0

Ich werde den bearbeiteten Code als zweite Antwort –