作者: Mr.Li

  • 处理不规范数据,这招儿有点狠

    下面的这种表格形式,想必大家不会陌生吧:

    在这个表格内,同一个部门的人员名单都挤到一个单元格内。
    现在问题来了,要把这样的数据转换成数据列表,该怎么操作呢?

    在制作考勤、工资等表格时,都需要使用上面这种样式的表格才可以。
    实现这样的转换有多种技巧,下面咱们以Excel2016为例,说说具体的操作方法:

    步骤一
    单击数据区域任意单元格,再依次单击【数据】【从表格】。

    Excel自动打开【查询编辑器】界面。

    步骤二
    单击小组负责人所在列的列标,在【转换】选项卡下,依次单击【拆分列】【按分割符】。
    在拆分对话框中,分隔符选择自定义,输入、(顿号)。

    分列后的效果:

    步骤三
    按住Ctrl键不放,依次选中小组负责人的几个列,在【转换】选项卡中单击【逆透视列】

    转换后的效果:

    步骤四
    右键单击【属性】列的列标,删除。
    然后单击【开始】,【关闭并上载】

    这样就生成一个新的工作表,转置完成啦。

    本文转载来源 “ ExcelHome ”,转载请注明出处,感谢您的尊重!
  • php创建和调用webservice接口实例详解

    作为开发者来讲,要想写webservice接口或者调用别人的webservice接口,首先需要了解什么是webservice。简单说, WebService就是一些站点开放一些服务出来, 也可以是你自己开发的Service, 也就是一些方法, 通过URL,指定某一个方法名,发出请求,站点里的这个服务(方法),接到你的请求,根据传过来的参数,做一些处理,然后把处理后的结果以XML形式返回来给你,你的程序就解析这些XML数据,然后显示出来或做其它操作。

     

    写webservice需要了解:基础的 Web Services 平台是 XML + HTTP;另外Web services 平台的元素:SOAP (简易对象访问协议),UDDI (通用描述、发现及整合),WSDL (Web services 描述语言);任何webservice都包括客户端和服务端。下面以实例讲解如何用php写webservice接口让别人调用:

    首先需要建一个.wsdl文件,那么php如何建这个文件呢。有两种方式可以实现,一种是直接用zend studio工具生成;另一种就是php根据SoapDiscovery.class.php自动生成wsdl文件;具体哪一种根据自己情况选择,我一般用的是前者这样比较快速。下面写一下用类如何生成wsdl文件,首先需要上网上下载那个类文件,然后引入类文件后,看如下代码:
    creat_wsdl.php

    代码如下:

    1

    2

    3

    4

    5

    6

    <?php

    include_once('Service.php');

    include_once('SoapDiscovery.class.php');

    $wsdl=new SoapDiscovery('Service','soap');//第一参数为类名,也是生成wsdl的文件名Service.wsdl,第二个参数是服务的名字可以随便写

    $wsdl->getWSDL();

    ?>


    这样运行creat_wsdl.php文件就可以生成wsdl文件了。是不是很简单
    任何一个webservice都需要和一个实现类绑定的。也就是说别人调用的wsdl文件其实真正其作用的就是实现类中的方法;如下代码为服务端类文件
    Service.php

    代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    <?php

    class Service

    {

    public function Hello()

    {

    echo 'hello good';

    }

    public function Add($a,$b)

    {

    return $a+$b;

    }

    }

    $server=SoapServer('Service.php',array('soap_version'=>soap_1_2));

    $server->setClass('Service');//注册Service类的所有方法

    $server->handle();//处理请求

    ?>

    写好服务端和wsdl文件后那么就需要客户端调用了。请看客户端调用代码:

    client.php

    代码如下:

    1

    2

    3

    4

    5

    6

    <?php

    ini_set('soap.wsdl_cache_enabled','0');//关闭缓存

    $soap=new SoapClient('http://127.0.0.1/soap/Service.php?wsdl');

    echo $soap->Add(1,2);

    //echo $soap->_soapCall('Add',array(1,2))//或者这样调用也可以

    ?>

    这就是一个完整的写webservice接口和调用的实例代码,希望对需要的phper有所帮助;
    那么调用别人的webservice接口就是client.php所写的代码这样调用。

    本文原创发布php中文网 ,转载请注明出处,感谢您的尊重!
  • 和身份证有关的5个Excel函数公式

    以下是一组和身份证有关的函数公式,如果你是财务人员或是一名HR,那就一起来看一下啦:

    1、查找重复身份证号码:
    =IF(COUNTIF(A:A,A2&"*")>1,"重复","")

    要点:
    在COUNTIF函数的第二参数后加上一个星号 &"*"。
    COUNTIF函数在计算文本型数字时,会默认按数值型进行处理,但是Excel中的数字精度只有15位,并且身份证号码是18位,因此会把前15位相同的身份证全部识别为相同的内容。在第二参数后加上一个星号 &"*",就是告诉Excel,要查找包含A2单元格内容的文本,通过这样变通的手段,COUTNIF函数就听话啦。

    2、用出生年月来计算年龄:
    =DATEDIF(A4,TODAY(),"y")

    要点:
    DATEDIF函数用于计算两个日期之间的间隔。用法是:
    =DATEDIF(开始日期,结束日期,指定要返回的类型)
    第三参数是Y,表示年,是M,就表示月。
    TODAY函数返回系统当前的日期。
    DATEDIF函数是隐藏函数,输入时没有屏幕提示,需要手工录入哦。

    3、根据身份证号计算出生年月:
    =–TEXT(MID(A2,7,8),"0!/00!/00")

    要点:
    身份证号码中的第8位到15位是出生年月信息。
    首先使用MID函数从A2单元格的第7位开始,提取出8个字符,得到类似 19840727的结果。
    再使用TEXT函数将这个字符串变成日期样式的文本,得到类似1984/07/27的结果。
    由于TEXT函数的结果是文本型的内容,所以加上两个小减号 — 就是计算负数的负数,通过四则运算,变成真正的日期序列。
    公式也可以使用=–TEXT(MID(A2,7,8),"0-00-00"),原理是一样的。

    4、根据身份证号码提取性别:
    =IF(MOD(MID(A2,15,3),2),"男","女")

    要点:
    身份证号码中的第17位是性别信息,单数表示男,双数表示女。
    首先使用MID函数从A2单元格的第15位开始,提取出3个字符。
    再使用MOD函数计算这个字符与2相除的余数。
    最后使用IF函数判断,如果余数大于0,返回男,如果余数是0,则返回女。
    这里使用MID(A2,15,3),是为了兼容15位的旧身份证,这部分公式也可以使用MID(A2,17,1)。

    5、根据身份证号计算退休时间:
    =EDATE(TEXT(MID(A2,7,8),"0!/00!/00"),MOD(MID(A2,15,3),2)*120+600)

    要点:
    先用TEXT(MID(A2,7,8),"0!/00!/00"),计算出出生年月信息。
    再使用MOD(MID(A2,15,3),2)计算性别码和2相除的余数,结果是1或是0。
    如果性别码和2相除的余数是1,MOD(MID(A2,15,3),2)*120+600部分就相当于1*120+600,结果是720。
    否则就是0*120+600,结果是600。
    EDATE函数返回一个日期经过指定月份后的日期,也就是以出生年月为准,男性要经过720个月(60年),女性要经过600个月(50年)就是退休年龄了

    本文转载来源 “ ExcelHome ”,转载请注明出处,感谢您的尊重!
  • Excel多工作表快速汇总,简单才是硬道理

    今天和大家一起分享一篇多工作表合并汇总的技巧,教程所使用的Excel版本是Office 365。如果你是Excel 2016,不用担心,操作步骤完全一样。

    西门怡红超市,一个月每一天的销售报表存放在同一工作簿内:

    现在要汇总1个月的销售数据,也就是将1~31日的工作表全部进行汇总。
    效果如所示:

    步骤1   
    新建一个汇总工作簿,依次单击【数据】→【新建查询】→【从文件】→【从工作簿】:

    找到存放工作簿的地址,选中文件后点击【导入】:

    步骤2   
    在导航器中单击选中工作簿名称,点击【编辑】按钮:

    在查询编辑器窗口中,按住Ctrl键依次选中最右侧三列,单击鼠标右键→【删除列】:

    单击【Data】右下角的图标,展开数据:

    步骤3
    接下来对数据进行必要的整理:
    1、因为原表中有一个序号列,单击鼠标右键,把它删除:

    2、另外,原数据表中的首行是空行,第二行是数据表的名称,在汇总时是没有意义的,将其删除:
    点击【删除行】→【删除排在前列的行】,然后指定行数2,【确定】。

    3、右键单击最左侧的列标题→【重命名】,修改为“日期”。
        接下来把第一行用作标题:

    4、数据表中的空白行和字段标题也要去掉。
    点击【产品货号】的筛选按钮,在筛选列表中去掉null、空白以及字段标题的勾选,单击【确定】:

    依次点击【关闭并上载】→【仅创建连接】→【加载】:

    步骤4
    在【数据】选项卡下点击【现有连接】,打开刚刚创建的连接:

    在【导入数据】对话框中选择【数据透视表】:

    接下来根据需要调整透视表的布局,在【设计】选项卡下,报表布局选择为以表格形式显示,将分类汇总设置为无汇总。

    步骤5
    在【分析】选项卡下插入切片器:

    单击切片器中的日期,就可以看到对应的汇总结果:

    如果数据源发生变化,只要右键刷新 即可得到最新的结果。

    使用power query可以汇总多个工作表、汇总多个工作簿或是汇总多个工作簿下的多个工作表,这些内容以后咱们都会讲到哦。

    本教程示例文件下载:
    https://pan.baidu.com/s/1skIkuU5

    如果你使用的是Excel 2013,可以在此下载安装power query 插件:
    https://www.microsoft.com/zh-CN/download/details.aspx?id=39379
    其他Excel版本暂无法使用该功能哦

    本文转载来源 “ ExcelHome ”,转载请注明出处,感谢您的尊重!
  • SQL Server CONVERT() 函数

    定义和用法

    CONVERT() 函数是把日期转换为新数据类型的通用函数。

    CONVERT() 函数可以用不同的格式显示日期/时间数据。

    语法

    CONVERT(data_type(length),data_to_be_converted,style)

    data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

    可以使用的 style 值:

    Style ID Style 格式
    100 或者 0 mon dd yyyy hh:miAM (或者 PM)
    101 mm/dd/yy
    102 yy.mm.dd
    103 dd/mm/yy
    104 dd.mm.yy
    105 dd-mm-yy
    106 dd mon yy
    107 Mon dd, yy
    108 hh:mm:ss
    109 或者 9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
    110 mm-dd-yy
    111 yy/mm/dd
    112 yymmdd
    113 或者 13 dd mon yyyy hh:mm:ss:mmm(24h)
    114 hh:mi:ss:mmm(24h)
    120 或者 20 yyyy-mm-dd hh:mi:ss(24h)
    121 或者 21 yyyy-mm-dd hh:mi:ss.mmm(24h)
    126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)
    130 dd mon yyyy hh:mi:ss:mmmAM
    131 dd/mm/yy hh:mi:ss:mmmAM

    实例

    下面的脚本使用 CONVERT() 函数来显示不同的格式。我们将使用 GETDATE() 函数来获得当前的日期/时间:

    CONVERT(VARCHAR(19),GETDATE())
    CONVERT(VARCHAR(10),GETDATE(),110) 
    CONVERT(VARCHAR(11),GETDATE(),106)
    CONVERT(VARCHAR(24),GETDATE(),113)
    

    结果类似:

    Dec 29 2008 11:45 PM
    12-29-2008
    29 Dec 08
    29 Dec 2008 16:25:46.635
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!
  • SQL Server DATEDIFF() 函数

    定义和用法

    DATEDIFF() 函数返回两个日期之间的时间。

    语法

    DATEDIFF(datepart,startdate,enddate)

    startdate 和 enddate 参数是合法的日期表达式。

    datepart 参数可以是下列的值:

    datepart 缩写
    yy, yyyy
    季度 qq, q
    mm, m
    年中的日 dy, y
    dd, d
    wk, ww
    星期 dw, w
    小时 hh
    分钟 mi, n
    ss, s
    毫秒 ms
    微妙 mcs
    纳秒 ns

    实例

    例子 1

    使用如下 SELECT 语句:

    SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate

    结果:

    DiffDate
    1

    例子 2

    使用如下 SELECT 语句:

    SELECT DATEDIFF(day,'2008-12-30','2008-12-29') AS DiffDate

    结果:

    DiffDate
    -1
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!
  • SQL Server DATEADD() 函数

    定义和用法

    DATEADD() 函数在日期中添加或减去指定的时间间隔。

    语法

    DATEADD(datepart,number,date)

    date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。

    datepart 参数可以是下列的值:

    datepart 缩写
    yy, yyyy
    季度 qq, q
    mm, m
    年中的日 dy, y
    dd, d
    wk, ww
    星期 dw, w
    小时 hh
    分钟 mi, n
    ss, s
    毫秒 ms
    微妙 mcs
    纳秒 ns

    实例

    假设我们有下面这个 "Orders" 表:

    OrderId ProductName OrderDate
    1 'Computer' 2008-12-29 16:25:46.635

    现在,我们希望向 "OrderDate" 添加 2 天,这样就可以找到付款日期。

    我们使用如下 SELECT 语句:

    SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate
    FROM Orders
    

    结果:

    OrderId OrderPayDate
    1 2008-12-31 16:25:46.635
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!
  • SQL Server DATEPART() 函数

    定义和用法

    DATEPART() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

    语法

    DATEPART(datepart,date)

    date 参数是合法的日期表达式。datepart 参数可以是下列的值:

    datepart 缩写
    yy, yyyy
    季度 qq, q
    mm, m
    年中的日 dy, y
    dd, d
    wk, ww
    星期 dw, w
    小时 hh
    分钟 mi, n
    ss, s
    毫秒 ms
    微妙 mcs
    纳秒 ns

    实例

    假设我们有下面这个 "Orders" 表:

    OrderId ProductName OrderDate
    1 'Computer' 2008-12-29 16:25:46.635

    我们使用如下 SELECT 语句:

    SELECT DATEPART(yyyy,OrderDate) AS OrderYear,
    DATEPART(mm,OrderDate) AS OrderMonth,
    DATEPART(dd,OrderDate) AS OrderDay
    FROM Orders
    WHERE OrderId=1
    

    结果:

    OrderYear OrderMonth OrderDay
    2008 12 29
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!
  • SQL Server GETDATE() 函数

    定义和用法

    GETDATE() 函数从 SQL Server 返回当前的时间和日期。

    语法

    GETDATE()

    实例

    例子 1

    使用下面的 SELECT 语句:

    SELECT GETDATE() AS CurrentDateTime

    结果:

    CurrentDateTime
    2008-12-29 16:25:46.635

    注释:上面的时间部分精确到毫秒。

    例子 2

    下面的 SQL 创建带有日期时间列 (OrderDate) 的 "Orders" 表:

    CREATE TABLE Orders 
    (
    OrderId int NOT NULL PRIMARY KEY,
    ProductName varchar(50) NOT NULL,
    OrderDate datetime NOT NULL DEFAULT GETDATE()
    )
    

    请注意,OrderDate 把 GETDATE() 规定为默认值。结果是,当您在表中插入新行时,当前日期和时间自动插入列中。

    现在,我们希望在 "Orders" 表中插入一条记录:

    INSERT INTO Orders (ProductName) VALUES ('Computer')

    "Orders" 表将成为这样:

    OrderId ProductName OrderDate
    1 'Computer' 2008-12-29 16:25:46.635
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!
  • MySQL DATE_FORMAT() 函数

    定义和用法

    DATE_FORMAT() 函数用于以不同的格式显示日期/时间数据。

    语法

    DATE_FORMAT(date,format)

    date 参数是合法的日期。format 规定日期/时间的输出格式。

    可以使用的格式有:

    格式 描述
    %a 缩写星期名
    %b 缩写月名
    %c 月,数值
    %D 带有英文前缀的月中的天
    %d 月的天,数值(00-31)
    %e 月的天,数值(0-31)
    %f 微秒
    %H 小时 (00-23)
    %h 小时 (01-12)
    %I 小时 (01-12)
    %i 分钟,数值(00-59)
    %j 年的天 (001-366)
    %k 小时 (0-23)
    %l 小时 (1-12)
    %M 月名
    %m 月,数值(00-12)
    %p AM 或 PM
    %r 时间,12-小时(hh:mm:ss AM 或 PM)
    %S 秒(00-59)
    %s 秒(00-59)
    %T 时间, 24-小时 (hh:mm:ss)
    %U 周 (00-53) 星期日是一周的第一天
    %u 周 (00-53) 星期一是一周的第一天
    %V 周 (01-53) 星期日是一周的第一天,与 %X 使用
    %v 周 (01-53) 星期一是一周的第一天,与 %x 使用
    %W 星期名
    %w 周的天 (0=星期日, 6=星期六)
    %X 年,其中的星期日是周的第一天,4 位,与 %V 使用
    %x 年,其中的星期一是周的第一天,4 位,与 %v 使用
    %Y 年,4 位
    %y 年,2 位

    实例

    下面的脚本使用 DATE_FORMAT() 函数来显示不同的格式。我们使用 NOW() 来获得当前的日期/时间:

    DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
    DATE_FORMAT(NOW(),'%m-%d-%Y')
    DATE_FORMAT(NOW(),'%d %b %y')
    DATE_FORMAT(NOW(),'%d %b %Y %T:%f')
    

    结果类似:

    Dec 29 2008 11:45 PM
    12-29-2008
    29 Dec 08
    29 Dec 2008 16:25:46.635
    本文原创发布W3School ,转载请注明出处,感谢您的尊重!