首页 > 解决方案 > Excel Interop PageSetup 重视有或没有类型转换的奇怪行为

问题描述

我通过 Excel 互操作打开一个文件并尝试读取标题并得到 Excel 和 NPOI 之间的差异经过一些调查后,奇怪的行为浓缩到了这个测试用例中

        [TestCase]
        public void TestWeirdExcelBehaviour()
        {
            var excel = new Microsoft.Office.Interop.Excel.Application();     
            // "mocking" a document with a heading
            excel.Workbooks.Add();
            excel.ActiveSheet.PageSetup.CenterHeader = "&THeading";

            var nuxt =              excel.Sheets[1] .PageSetup.CenterHeader;    //&THeading
            var nixt = ((Worksheet) excel.Sheets[1]).PageSetup.CenterHeader;    //&UHeading

            Assert.AreEqual(nuxt, nixt); // nope they are not equal
        }

不同之处在于仅通过类型转换&T替换为&UWorksheet

从 NPOI 中的测试来看,我认为带有的版本&U是正确的。

基本问题是为什么会发生这种情况?是否还有其他类似的功能,Interop 中的类型转换有很大的不同?

我正在使用 Excel 2010 和“Microsoft.Office.Interop.Excel\15.0.4795.1000”

编辑:进一步压缩测试用例以删除特定于语言的内容

Edit2:我使用的占位符的映射表

  Without cast   With cast  
 -------------- ----------- 
  &T             &U         
  &S             &P         
  &A             &N         
  &B             &A         
  &X             &X         
  &8             &8         
  &16            &16        
  &22            &22        
  &6             &6         
  &9             &9         
  &MFF0000       &KFF0000   
  &D             &D         
  &N             &F         
  &"             &"        

标签: c#excel-2010interop

解决方案


推荐阅读