c# - 使用 C# 导出到 OneNote

标签 c# ms-office onenote onenote-api

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

问题是当我尝试使用“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);

最佳答案

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

     }

 }

检查文件是否处于事件状态,如果不活动,您可以使用其他部分进行操作,以便当前数据将附加现有值

关于c# - 使用 C# 导出到 OneNote,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39555585/

相关文章:

java - 从Excel工作表中读取多行并存储到数据库

vba - 如何在 Word 2007 VBA 中访问某种 OnLoad 事件?

c# - 将 C# 控制台应用程序转换为服务(Main 方法不起作用)

c# - C# .NET 中的方法或属性之间存在歧义

excel - 您组织的策略阻止我们完成此操作 - Microsoft Office

android - 如何将 Microsoft 的 LiveSDK 导入到 Android Studio 项目中?

intellij-idea - Intellij-使用格式将粘贴代码复制到Onenote 2016丢失的空间

python - onenote API 使用 python : adding more text to a page

c# - 多点触控点击次数

c# - 有没有工具可以分析C#和WPF项目是否可以移植到Silverlight?