当前位置: 首页 > 编程日记 > 正文

【翻译】将Ext JS Grid转换为Excel表格

原文:Converting an Ext 5 Grid to Excel Spreadsheet

稍微迟来的礼物——Ext JS Grid转为Excel代码,现在支持Ext JS 5!

功能包括:
- 支持分组
- 数字的处理 VS 字符串数据类型
- 对于不支持客户端下载的浏览器会提交回服务器

Enjoy!

/*Excel.js - convert an ExtJS 5 grid into an Excel spreadsheet using nothing butjavascript and good intentions.By: Steve DruckerDec 26, 2014Original Ext 3 Implementation by: Nige "Animal" White?Contact Info:e. sdrucker@figleaf.comblog: druckit.wordpress.comlinkedin: www.linkedin.com/in/uberfiggit: http://github.com/sdruckerfigcompany: Fig Leaf Software (http://www.figleaf.com / http://training.figleaf.com)Invocation:  grid.downloadExcelXml(includeHiddenColumns,title)Upgraded for ExtJS5 on Dec 26, 2014*/var Base64 = (function() {// Private propertyvar keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";    // Private method for UTF-8 encodingfunction utf8Encode(string) {string = string.replace(/\r\n/g, "\n");        var utftext = "";        for (var n = 0; n < string.length; n++) {            var c = string.charCodeAt(n);            if (c < 128) {utftext += String.fromCharCode(c);} else if ((c > 127) && (c < 2048)) {utftext += String.fromCharCode((c >> 6) | 192);utftext += String.fromCharCode((c & 63) | 128);} else {utftext += String.fromCharCode((c >> 12) | 224);utftext += String.fromCharCode(((c >> 6) & 63) | 128);utftext += String.fromCharCode((c & 63) | 128);}}        return utftext;}    // Public method for encodingreturn {encode: (typeof btoa == 'function') ? function(input) {return btoa(utf8Encode(input));} : function(input) {var output = "";            var chr1, chr2, chr3, enc1, enc2, enc3, enc4;            var i = 0;input = utf8Encode(input);            while (i < input.length) {chr1 = input.charCodeAt(i++);chr2 = input.charCodeAt(i++);chr3 = input.charCodeAt(i++);enc1 = chr1 >> 2;enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);enc4 = chr3 & 63;                if (isNaN(chr2)) {enc3 = enc4 = 64;} else if (isNaN(chr3)) {enc4 = 64;}output = output +keyStr.charAt(enc1) + keyStr.charAt(enc2) +keyStr.charAt(enc3) + keyStr.charAt(enc4);}            return output;}};
})();Ext.define('MyApp.overrides.view.Grid', {override: 'Ext.grid.GridPanel',requires: 'Ext.form.action.StandardSubmit',    /*Kick off process*/downloadExcelXml: function(includeHidden, title) {if (!title) title = this.title;        var vExportContent = this.getExcelXml(includeHidden, title);        /* dynamically create and anchor tag to force download with suggested filename note: download attribute is Google Chrome specific*/if (Ext.isChrome) {            var gridEl = this.getEl();            var location = 'data:application/vnd.ms-excel;base64,' + Base64.encode(vExportContent);            var el = Ext.DomHelper.append(gridEl, {tag: "a",download: title + "-" + Ext.Date.format(new Date(), 'Y-m-d Hi') + '.xls',href: location});el.click();Ext.fly(el).destroy();} else {            var form = this.down('form#uploadForm');            if (form) {form.destroy();}form = this.add({xtype: 'form',itemId: 'uploadForm',hidden: true,standardSubmit: true,url: 'http://webapps.figleaf.com/dataservices/Excel.cfc?method=echo&mimetype=application/vnd.ms-excel&filename=' + escape(title + ".xls"),items: [{xtype: 'hiddenfield',name: 'data',value: vExportContent}]});form.getForm().submit();}},    /*Welcome to XML HellSee: http://msdn.microsoft.com/en-us/library/office/aa140066(v=office.10).aspxfor more details*/getExcelXml: function(includeHidden, title) {var theTitle = title || this.title;        var worksheet = this.createWorksheet(includeHidden, theTitle);        if (this.columnManager.columns) {            var totalWidth = this.columnManager.columns.length;} else {             var totalWidth = this.columns.length;}        return ''.concat(            '<?xml version="1.0"?>',            '<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40">',            '<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office"><Title>' + theTitle + '</Title></DocumentProperties>',            '<OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office"><AllowPNG/></OfficeDocumentSettings>',            '<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">',            '<WindowHeight>' + worksheet.height + '</WindowHeight>',            '<WindowWidth>' + worksheet.width + '</WindowWidth>',            '<ProtectStructure>False</ProtectStructure>',            '<ProtectWindows>False</ProtectWindows>',            '</ExcelWorkbook>',            '<Styles>',            '<Style ss:ID="Default" ss:Name="Normal">',            '<Alignment ss:Vertical="Bottom"/>',            '<Borders/>',            '<Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="12" ss:Color="#000000"/>',            '<Interior/>',            '<NumberFormat/>',            '<Protection/>',            '</Style>',            '<Style ss:ID="title">',            '<Borders />',            '<Font ss:Bold="1" ss:Size="18" />',            '<Alignment ss:Horizontal="Center" ss:Vertical="Center" ss:WrapText="1" />',            '<NumberFormat ss:Format="@" />',            '</Style>',            '<Style ss:ID="headercell">',            '<Font ss:Bold="1" ss:Size="10" />',            '<Alignment ss:Horizontal="Center" ss:WrapText="1" />',            '<Interior ss:Color="#A3C9F1" ss:Pattern="Solid" />',            '</Style>',            '<Style ss:ID="even">',            '<Interior ss:Color="#CCFFFF" ss:Pattern="Solid" />',            '</Style>',            '<Style ss:ID="evendate" ss:Parent="even">',            '<NumberFormat ss:Format="yyyy-mm-dd" />',            '</Style>',            '<Style ss:ID="evenint" ss:Parent="even">',            '<Numberformat ss:Format="0" />',            '</Style>',            '<Style ss:ID="evenfloat" ss:Parent="even">',            '<Numberformat ss:Format="0.00" />',            '</Style>',            '<Style ss:ID="odd">',            '<Interior ss:Color="#CCCCFF" ss:Pattern="Solid" />',            '</Style>',            '<Style ss:ID="groupSeparator">',            '<Interior ss:Color="#D3D3D3" ss:Pattern="Solid" />',            '</Style>',            '<Style ss:ID="odddate" ss:Parent="odd">',            '<NumberFormat ss:Format="yyyy-mm-dd" />',            '</Style>',            '<Style ss:ID="oddint" ss:Parent="odd">',            '<NumberFormat Format="0" />',            '</Style>',            '<Style ss:ID="oddfloat" ss:Parent="odd">',            '<NumberFormat Format="0.00" />',            '</Style>',            '</Styles>',worksheet.xml,            '</Workbook>');},    /*Support function to return field info from store based on fieldname*/getModelField: function(fieldName) {var fields = this.store.model.getFields();        for (var i = 0; i < fields.length; i++) {            if (fields[i].name === fieldName) {                return fields[i];}}},    /*Convert store into Excel Worksheet*/generateEmptyGroupRow: function(dataIndex, value, cellTypes, includeHidden) {var cm = this.columnManager.columns;        var colCount = cm.length;        var rowTpl = '<Row ss:AutoFitHeight="0"><Cell ss:StyleID="groupSeparator" ss:MergeAcross="{0}"><Data ss:Type="String"><html:b>{1}</html:b></Data></Cell></Row>';        var visibleCols = 0;        // rowXml += '<Cell ss:StyleID="groupSeparator">'for (var j = 0; j < colCount; j++) {            if (cm[j].xtype != 'actioncolumn' && (cm[j].dataIndex != '') && (includeHidden || !cm[j].hidden)) {                // rowXml += '<Cell ss:StyleID="groupSeparator"/>';visibleCols++;}}        // rowXml += "</Row>";return Ext.String.format(rowTpl, visibleCols - 1, Ext.String.htmlEncode(value));},createWorksheet: function(includeHidden, theTitle) {// Calculate cell data types and extra class names which affect formattingvar cellType = [];        var cellTypeClass = [];console.log(this);        if (this.columnManager.columns) {            var cm = this.columnManager.columns;} else {            var cm = this.columns;}console.log(cm);        var colCount = cm.length;        var totalWidthInPixels = 0;        var colXml = '';        var headerXml = '';        var visibleColumnCountReduction = 0;        for (var i = 0; i < cm.length; i++) {            if (cm[i].xtype != 'actioncolumn' && (cm[i].dataIndex != '') && (includeHidden || !cm[i].hidden)) {                var w = cm[i].getEl().getWidth();totalWidthInPixels += w;                if (cm[i].text === "") {cellType.push("None");cellTypeClass.push("");++visibleColumnCountReduction;} else {colXml += '<Column ss:AutoFitWidth="1" ss:Width="' + w + '" />';headerXml += '<Cell ss:StyleID="headercell">' +                        '<Data ss:Type="String">' + cm[i].text.replace("<br>"," ") + '</Data>' +                        '<NamedCell ss:Name="Print_Titles"></NamedCell></Cell>';                    var fld = this.getModelField(cm[i].dataIndex);                    switch (fld.$className) {                        case "Ext.data.field.Integer":cellType.push("Number");cellTypeClass.push("int");                            break;                        case "Ext.data.field.Number":cellType.push("Number");cellTypeClass.push("float");                            break;                        case "Ext.data.field.Boolean":cellType.push("String");cellTypeClass.push("");                            break;                        case "Ext.data.field.Date":cellType.push("DateTime");cellTypeClass.push("date");                            break;                        default:cellType.push("String");cellTypeClass.push("");                            break;}}}}        var visibleColumnCount = cellType.length - visibleColumnCountReduction;        var result = {height: 9000,width: Math.floor(totalWidthInPixels * 30) + 50};        // Generate worksheet header details.// determine number of rowsvar numGridRows = this.store.getCount() + 2;        if ((this.store.groupField &&!Ext.isEmpty(this.store.groupField)) || (this.store.groupers && this.store.groupers.items.length > 0)) {numGridRows = numGridRows + this.store.getGroups().length;}        // create header for worksheetvar t = ''.concat(            '<Worksheet ss:Name="' + theTitle + '">',            '<Names>',            '<NamedRange ss:Name="Print_Titles" ss:RefersTo="=\'' + theTitle + '\'!R1:R2">',            '</NamedRange></Names>',            '<Table ss:ExpandedColumnCount="' + (visibleColumnCount + 2),            '" ss:ExpandedRowCount="' + numGridRows + '" x:FullColumns="1" x:FullRows="1" ss:DefaultColumnWidth="65" ss:DefaultRowHeight="15">',colXml,            '<Row ss:Height="38">',            '<Cell ss:MergeAcross="' + (visibleColumnCount - 1) + '" ss:StyleID="title">',            '<Data ss:Type="String" xmlns:html="http://www.w3.org/TR/REC-html40">',            '<html:b>' + theTitle + '</html:b></Data><NamedCell ss:Name="Print_Titles">',            '</NamedCell></Cell>',            '</Row>',            '<Row ss:AutoFitHeight="1">',headerXml +            '</Row>');        // Generate the data rows from the data in the Storevar groupVal = "";        var groupField = "";        if (this.store.groupers && this.store.groupers.keys.length > 0) {groupField = this.store.groupers.keys[0];} else if (this.store.groupField != '') {groupField = this.store.groupField;}        for (var i = 0, it = this.store.data.items, l = it.length; i < l; i++) {            if (!Ext.isEmpty(groupField)) {                if (groupVal != this.store.getAt(i).get(groupField)) {groupVal = this.store.getAt(i).get(groupField);t += this.generateEmptyGroupRow(groupField, groupVal, cellType, includeHidden);}}t += '<Row>';            var cellClass = (i & 1) ? 'odd' : 'even';r = it[i].data;            var k = 0;            for (var j = 0; j < colCount; j++) {                if (cm[j].xtype != 'actioncolumn' && (cm[j].dataIndex != '') && (includeHidden || !cm[j].hidden)) {                    var v = r[cm[j].dataIndex];                    if (cellType[k] !== "None") {t += '<Cell ss:StyleID="' + cellClass + cellTypeClass[k] + '"><Data ss:Type="' + cellType[k] + '">';                        if (cellType[k] == 'DateTime') {t += Ext.Date.format(v, 'Y-m-d');} else {t += Ext.String.htmlEncode(v);}t += '</Data></Cell>';}k++;}}t += '</Row>';}result.xml = t.concat(            '</Table>',            '<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">',            '<PageLayoutZoom>0</PageLayoutZoom>',            '<Selected/>',            '<Panes>',            '<Pane>',            '<Number>3</Number>',            '<ActiveRow>2</ActiveRow>',            '</Pane>',            '</Panes>',            '<ProtectObjects>False</ProtectObjects>',            '<ProtectScenarios>False</ProtectScenarios>',            '</WorksheetOptions>',            '</Worksheet>');        return result;}
});123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438

附:在原文底部有Ext JS 4版本的链接


相关文章:

AI研究过于集中狭隘,我们是不是该反思了?

作者 | Sergii Shelpuk译者 | 陆离编辑 | 夕颜出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;【导读】2019年是AI领域更加冷静的一年&#xff0c;少了些喧嚣和泡沫&#xff0c;大浪淘沙留下的是经过检验的真正的AI研究者、实践者。但是你也许没有发现&#xff0c;本…

上周回顾:微软与苹果比赛谁更“不安全”

每个月的第二周应该是微软例行发布补丁的日子&#xff0c;本周也不例外&#xff0c;微软如定期新闻发布会一样公布了自己的安全公告。这本来已经成了例如51CTO.com这样关注企业网络安全的媒体重要的素材&#xff0c;不过没想到的是本周苹果偏要抢这个风头……热点一&#xff1a…

一种注册表沙箱的思路、实现——注册表的一些基础知识

要做注册表沙箱&#xff0c;就必须要了解部分注册表知识。而注册表的知识很多&#xff0c;本文主要讲述如何在win32系统是上识别注册表映射的。&#xff08;转载请指明出处&#xff09; 在我的xp 32bit系统上&#xff0c;WinR regedit之后打开注册表管理器。我们可以看到如下主…

bzoj 2565: 最长双回文串 manacher算法

2565: 最长双回文串 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id2565 Description 顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串&#xff0c;而abc不是&#xff08;abc的顺序为“abc”&#xff0c;逆…

44岁的微软如何刷新未来?

整理 | 伍杏玲出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;在当今的“云”时代&#xff0c;很多企业在多个云计算平台部署应用&#xff0c;且需要统一管理和保护应用。在微软Ignite 2019 大会上&#xff0c;为了让企业轻松地在任何类型的基础设施平台上…

一种注册表沙箱的思路、实现——Hook Nt函数

Nt函数是在Ring3层最底层的函数了&#xff0c;选择此类函数进行Hook&#xff0c;是为了提高绕过门槛。我的Hook方案使用的是微软的Detours。&#xff08;转载请指明出处&#xff09;Detours的Hook和反Hook的写入如下&#xff1a; DetourTransactionBegin(); DetourUpdateThread…

浅析Struts 体系结构与工作原理(图)

Struts 体系结构是目前基于java的 web系统设计中广泛使用的mvc构架。基本概念    Struts是Apache 基金会Jakarta 项目组的一个Open Source 项目&#xff0c;它采用模型-视图-控制器&#xff08;Model-View- Controller&#xff0c;简称MVC&#xff09;模式&#xff0c;能够…

2015第22周一Web性能测试工具及IE扩展区别

在高性能web测试工具推荐http://www.jb51.net/article/23034.htm中发现了dynaTrace 感觉很不错&#xff0c;不但可以检测资源加载瀑布图&#xff0c;而且还能监控页面呈现时间&#xff0c;CPU花销&#xff0c;JS分析和执行时间&#xff0c;CSS解析时间的等。http://www.ibm.com…

一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现1

因为我们沙箱注入了一个DLL到了目标进程&#xff0c;并且Hook了一系列NtXX(NtOpenKey)函数&#xff0c;所以我们在注入的代码中是不能使用RegXX(RegOpenKey等)这类函数的。因为RegXX系列函数在底层使用了NtXX系列函数&#xff0c;如果在注入DLL执行Hook后的逻辑中使用了RegXX系…

面试大厂背怼!这都搞不定,你只能做“搬运工”!

每一个面试过大厂的程序员似乎总会有种种困境&#xff1a;毕业季参加大厂校招面试&#xff0c;我本以为做过一些真实项目就不错了&#xff0c;没想到根本没问什么项目&#xff0c;都是基础知识&#xff0c;数学、算法&#xff0c;然而平时只喜欢学程序设计。小公司工作3年&…

net程序架构开发

< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd> 程序架构,功能的划分: 数据库(包括存储过程) 数据访问(包括Microsoft Application Blocks for .NET的2.0版) 数据结构(等价于强类型DataSet) 业务逻辑层 业务表现层 数据库:不用说…

Java面向对象学习笔记 -- 6(内部类、Timer)

1. 内部类内部类就是在一个类的内部定义的类&#xff0c;有&#xff1a;静态内部类、成员内部类&#xff0c;局部内部类、匿名内部类。-1) 静态内部类&#xff1a;使用static修饰&#xff0c;声明在类体中&#xff0c; 静态内部类中可以访问外部类的静态成员&#xff0c;开发很…

30年间,软件开发行业为何Bug纷飞?

作者 | Chris Fox译者 | 弯月&#xff0c;责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;【导语】在时间的推移历程中&#xff0c;软件行业早已发生了天翻地覆的变化。和曾经大家习以为常的编码日常相比&#xff0c;越多越多的开发者发现&#xff0c;如…

去掉字符串两端的全角空格和半角空格(含源代码)

昨天&#xff0c;遇到了一个技术问题。本来我在程序中用的trim()方法来处理从JSP页面传来的值,后来在测试时&#xff0c;发现当我输入的是全角空格时&#xff0c;trim()方法失效。需求是这样的&#xff0c;只是去掉字符串两端的空格&#xff08;不论是全角空格还是半角空格&…

一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现2

上一篇博文中主要介绍了Reactos中大部分函数的思路和HKEY和HANDLE之间的关系&#xff0c;本文将介绍一些Reactos中有意思的函数和存在bug的函数。&#xff08;转载请指明出处&#xff09;CreateNestedKey是一个辅助创建键的函数&#xff0c;比如我们要创建\Regsitry\User\3\2\1…

云计算安全解决方案白皮书(一)

云计算安全解决方案白皮书Jack zhai研究云的安全有两三年了&#xff0c;但形成完整的安全思路&#xff0c;还是去年的事&#xff0c;这也是“流安全”思路形成的主要阶段。云计算的安全问题之所以突出&#xff0c;是因为虚拟机的动态迁移&#xff0c;以及多业务系统交织在一起&…

一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现3

这篇我们看一个”容错“”节省“的实例。一下是一个Win32API的声明&#xff08;转载请指明出处&#xff09; LONG WINAPI RegEnumKeyEx(__in HKEY hKey,__in DWORD dwIndex,__out LPTSTR lpName,__inout LPDWORD lpcName,__reserved LPDWORD lp…

腾讯Angel升级:加入图算法,支持十亿节点、千亿边规模!中国首个毕业于Linux AI基金会的开源项目...

出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;【导语】Angel 是腾讯的首个AI开源项目&#xff0c;于 2016 年底推出、2017年开源。近日&#xff0c;快速发展的 Angel 完成了从 2.0 版本到 3.0 版本的跨越&#xff0c;从一个单纯的模型训练系统进化成包…

如何在JSP页面中获取当前系统时间转

出自&#xff1a;http://hi.baidu.com/itfuck_/item/803662469cdf7baa61d7b945 1: import java.util.*; int y,m,d,h,mm; Calendar c Calendar.getInstance(); y c.get(Calendar.YEAR); //年 m c.get(Calendar.MONTH) 1; //月 d c.get(Calendar.DAY_OF_MONTH); //日 …

如何用Python实现超级玛丽的界面和状态机?

作者 | marble_xu编辑 | 郭芮来源 | CSDN博客小时候的经典游戏&#xff0c;代码参考了github上的项目Mario-Level-1&#xff08;https://github.com/justinmeister/Mario-Level-1&#xff09;&#xff0c;使用pygame来实现&#xff0c;从中学习到了横版过关游戏实现中的一些处理…

一种注册表沙箱的思路、实现——研究Reactos中注册表函数的实现4

今天为了KPI&#xff0c;搞了一天的PPT&#xff0c;搞得恶心想吐。最后还是回到这儿&#xff0c;这儿才是我的净土&#xff0c;可以写写我的研究。 这儿讲一些Reactos中一些明显的错误。&#xff08;转载请指明出处&#xff09; 在Reactos的RegQueryInfoKeyW中有段这样的实现 i…

Netscaler 认证,访问报http 5000 内部错误

在VDI项目中&#xff0c;Netscaler经常与AD不在同一网络&#xff0c;有时在icaprofile中写的SF或WI的FQDN&#xff0c;访问VDI&#xff0c;会报http 5000 内部错误&#xff1b;解决办法如下&#xff1a;1.NS无法解析Storefont或WI的主机名&#xff0c;需要修改icaprofile 中SF或…

解读 | 2019年10篇计算机视觉精选论文(中)

导读&#xff1a;2019 年转眼已经接近尾声&#xff0c;我们看到&#xff0c;这一年计算机视觉&#xff08;CV&#xff09;领域又诞生了大量出色的论文&#xff0c;提出了许多新颖的架构和方法&#xff0c;进一步提高了视觉系统的感知和生成能力。因此&#xff0c;我们精选了 20…

PE文件和COFF文件格式分析--概述

刚工作的时候&#xff0c;我听说某某大牛在做病毒分析时&#xff0c;只是用notepad打开病毒文件&#xff0c;就能大致猜到病毒的工作原理。当时我是佩服的很啊&#xff0c;同时我也在心中埋下了一个种子&#xff1a;我也得有这天。随着后来的工作进行&#xff0c;一些任务的和这…

2015第22周六Java反射、泛型、容器简介

Java的反射非常强大&#xff0c;传递class&#xff0c; 可以动态的生成该类、取得这个类的所有信息&#xff0c;包括里面的属性、方法以及构造函数等&#xff0c;甚至可以取得其父类或父接口里面的内容。 obj.getClass().getDeclaredMethods();//取得obj类中自己定义的方法&…

中服公司企业信息化的ERP系统选择

中服公司企业信息化的ERP系统选择一、 中服公司概况 1. 组织概况 中服公司创建于1950年9月&#xff0c;是国家120家企业集团试点单位之一&#xff0c;主要经营各类纺织原料、半成品、服装、针棉毛织品以及其他商品的进出口业务&#xff0c;同时通过合资、联营等方…

PE文件和COFF文件格式分析--MS-DOS 2.0兼容Exe文件段

MS 2.0节是PE文件格式中第一个“节”。其大致结构如下&#xff1a;&#xff08;转载请指明来源于breaksoftware的csdn博客&#xff09; 在VC\PlatformSDK\Include\WinNT.h文件中有对MS-DOS 2.0兼容EXE文件头的完整定义 typedef struct _IMAGE_DOS_HEADER { // DOS .EXE h…

时间可以是二维的?基于二维时间图的视频内容片段检测 | AAAI 2020

作者 | 彭厚文、傅建龙来源 | 微软研究院AI头条&#xff08;ID: MSRAsia&#xff09;编者按&#xff1a;当时间从一维走向二维&#xff0c;时序信息处理问题中一种全新的建模思路由此产生。根据这种新思路及其产生的二维时间图概念&#xff0c;微软亚洲研究院提出一种新的解决时…

《燃烧的岁月》

温含着优美的文句中&#xff0c;字里行间&#xff0c;透过一层薄薄的纸&#xff0c;牵挂起往事如烟&#xff0c;曾经的努力和成长&#xff0c;透过那以视频同时走过的路&#xff0c;默默无闻&#xff0c;牵挂着的是一句句唯美的文笔&#xff0c;留下情感的诗句文笔&#xff0c;…

PE文件和COFF文件格式分析——签名、COFF文件头和可选文件头1

本文将讨论PE文件中非常重要的一部分信息。&#xff08;转载请指明来源于breakSoftware的CSDN博客&#xff09; 首先说一下VC中对应的数据结构。“签名、COFF文件头和可选文件头”这三部分信息组合在一起是一个叫IMAGE_NT_HEADERS的结构体。 typedef struct _IMAGE_NT_HEADERS6…