Excel中自定义属性

public static string GetCustomProperty(this Excel.Workbook book, string propertyName)
        {
            //string strResult = string.Empty;
            //Office.DocumentProperties pros = (Office.DocumentProperties)book.CustomDocumentProperties;
            //strResult = GetCustomProperty(pros, propertyName);
            //if (!string.IsNullOrEmpty(strResult))
            //{
            //    return strResult;
            //}
            //int index = 1;
            //while (true)
            //{
            //    string pName = propertyName + index++.ToString();
            //    string pValue = GetCustomProperty(pros, pName);
            //    if (string.IsNullOrEmpty(pValue))
            //    {
            //        break;
            //    }
            //    else
            //    {
            //        strResult += pValue;
            //    }
            //}
            //return strResult;
            string strResult = string.Empty;

            var bookType = book.GetType();
            var pros = bookType.InvokeMember("CustomDocumentProperties", System.Reflection.BindingFlags.GetProperty, null, book, null);
            var propertiesType = pros.GetType();

            var enumerator = (IEnumerator)propertiesType.InvokeMember("GetEnumerator", System.Reflection.BindingFlags.InvokeMethod, null, pros, null);
            Func<string, string> getPropertyValue = new Func<string, string>(s =>
            {
                string strValue = string.Empty;
                enumerator.Reset();
                while (enumerator.MoveNext())
                {
                    var p = enumerator.Current;
                    var name = p.GetType().InvokeMember("Name", System.Reflection.BindingFlags.GetProperty, null, p, null);
                    if (name != null && name.ToString().Equals(propertyName))
                    {
                        return (string)p.GetType().InvokeMember("Value", System.Reflection.BindingFlags.GetProperty, null, p, null);
                    }
                }
                return strValue;
            });

            strResult = getPropertyValue(propertyName);
            if (!string.IsNullOrEmpty(strResult))
            {
                return strResult;
            }
            int index = 1;
            while (true)
            {
                string pName = propertyName + index++.ToString();
                string pValue = getPropertyValue(pName);
                if (string.IsNullOrEmpty(pValue))
                {
                    break;
                }
                else
                {
                    strResult += pValue;
                }
            }
            return strResult;
        }

注掉的代码,在多线程操作中会出错
时间: 2024-10-07 14:50:21

Excel中自定义属性的相关文章

如何把Excel中的单元格等对象保存成图片

对于Excel中的很多对象,比如单元格(Cell),图形(shape),图表(chart)等等,有时需要将它们保存成一张图片.就像截图一样. 最近做一个Excel相关的项目,项目中遇到一个很变态的需求, 需要对Excel中的一些对象进行拍图,比如,对一个单元格设置一些颜色之后拍图,或者对一个图表,报表拍成图片.经过比较曲折的经历,终于还是完成了.拿出来分享一下. 要做Excel,首先当然是查看Excel的com对象模型.地址在这里: http://msdn.microsoft.com/en-us

excel 中“插入”的快捷键有吗?

ctrl+shift+;  :插入时间 ctrl+;    :输入日期 ctrl+shift+#   :应用含年,月,日的"日期"格式 [email protected]    :应用含小时和分钟并标明上午或下午的"时间"格式 excel 中"插入"的快捷键有吗?,布布扣,bubuko.com

Excel技巧|如何在Excel中快速的批量将unix时间戳转化为北京时间

本文标签:  Excel技巧 unix时间戳转化北京时间 Excel时间戳转化北京时间 互联网杂谈 批量将将unix时间戳转化为北京时间 方法/步骤 单击要获得北京时间的那一列,右键,选择[设置单元格格式],在弹出的窗口中,左侧选择 [日期],右侧选择你想要的时间格式,点击确定. 选中其中一个单元格,输入公式 =(A2+8*3600)/86400+70*365+19 其中,A2是要转化的时间戳的单元格. 输入完公式,按下[回车键]. 该时间戳即转化为北京时间. 选中上面转化好的北京时间单元格,鼠

如何在Excel中少犯二(I)

作者:何明科链接:https://zhuanlan.zhihu.com/p/23472480来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 收到不少建议,要求开知乎Live来谈谈Excel.然而考虑到知识储备有限,还是先写文章来满足大家的需求,同时从特别窄的话题开始:"如何在Excel中少犯二".从这个话题开始的理由特别简单:首先,时常在别人的Excel数据模型中发现各种细小错误,哪怕作者花费再多的时间把图表搞得再精美,顿时对整个模型的结论产生怀疑:其次

使用Eclipse在Excel中找出两张表中相同证件号而姓名或工号却出现不同的的项

1:首先把Excel中的文本复制到txt中,复制如下: A表: 证件号                           工号  姓名 310110xxxx220130004 101 傅家宜310110xxxx220130005 102 顾音琪310110xxxx220130006 103 郭加峤310110xxxx220130007 104 胡奕蕾310110xxxx220130010 105 凌家蔚310110xxxx220130011 106 卢彦菁 B表: 证件号          

如何利用excel中的数据源制作数据地图

关于这个问题,制作数据地图的方法已不新奇,总体来说有这么几类方案: 一类方案:直接在excel里制作 优势:个人小数据量应用较为方便简单 缺点:需要熟悉VBA,且更强大的功能对VBA水平要求较高 1.绘制地图图形 + VBA宏语言 思路:用插入图形"任意多边形"绘制地图:每一个"任意多边形"赋予正确名称:对"任意多边形"赋值:利用VBA对"任意多边形"的值进行操作, 例如上色. 先准备一张所需要的地图图片,网上都有,可以下载

Excel中的VBA编程

目的:有时我们需要对Excel文件中大量的数据进行整理,此时如果使用手动整理会非常繁琐而且容易出错.而如果采用VBA语言,在Excel中根据需求编写一段简单的代码就能自动完成大量数据的整理工作. 1.以Excel 2007为例,如果要进行VBA编程,需要启用"开发工具" 选项.在Excel 选项对话框中勾选[在功能区显示"开发工具"选项卡]复选框. 在开发工具选项中点击"查看代码",打开Microsoft Visual Basic界面. 2.在M

用java将excel中数据导入mysql

java的poi技术读取Excel数据到MySQL 这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 :java的jxl技术导入Excel  项目结构: Excel中的测试数据: 数据库结构: 对应的SQL: 1 CREATE TABLE `student_info` ( 2 `id` int(11) NOT NULL AUTO_INCREMENT

C# Unity游戏开发——Excel中的数据是如何到游戏中的 (二)

本帖是延续的:C# Unity游戏开发——Excel中的数据是如何到游戏中的 (一) 上个帖子主要是讲了如何读取Excel,本帖主要是讲述读取的Excel数据是如何序列化成二进制的,考虑到现在在手游中应用很广泛的序列化技术Google的ProtoBuf,所以本文也是按照ProtoBuf的方式来操作的.ProtoBuf是一个开源库,简单来说ProtoBuf就是一个能使序列化的数据变得更小的类库,当然这里指的更小是相对的.好了ProtBuf的东西就不在多说,以后会专门写一篇帖子的.本帖其实就相当于上