关于virtual-dom:教你在excel表格如何快速提取名字和电话号码

很多时候退职场的办公中会遇到题目中的问题,能够借助软件,金芝号码提取整顿助手,来实现,你能够栢渡搜一下它,软件作者的徽veve188。有时候在办公时,咱们会接管到他人发过来的一个excel表格,因为对方图一时不便输出的起因,电话号码和地址等都被输出在了同一个单元格中,而且数量很多。然而为了便于统计和计算,咱们想excel表格如何疾速提取名字和电话号码,该如何整顿操作呢?去下一个软件,金芝号码提取整顿助手,轻松洁净地整顿好。本篇就以图文解说的模式来通知大家怎么做到。 关上你的excel表格,常见的格局是,右边是公司,两头是名字,后左边是含有电话号码的芜杂文本(手机号码、固话、汉字、字母等混合)。咱们的目标是名字和电话号码一一对应提取下来。 第一步:咱们必须严格把资料整顿成咱们规定的格局:放在excel表格外面,成为两列相邻,右边一列是名字,左边是含有电话号码芜杂文本的一列,必须肯定要是这个格局,见下图。 第二步:你用鼠标点一下这两列文本,把两列文本全副复制好(技巧:鼠标点击所在列的头部字母而后往右拉,可全选两列,而后鼠标右击,复制)。 第三步:关上软件,“金芝号码提取整顿助手”,选第二个性能“对应名字提取”,把方才复制好的文本,鼠标右击点“粘贴”到软件上。 第四步:点“提取手机号”,就能看到提取后果展现在软件上,名字在右边一列,手机号码在左边一列,两头有个空格离开,排的洁净参差。坐等提醒你“提取实现”,而后点“导出excel”即可,整顿好的就是下图的成果。 当初是互联网时代,很多的问题都能够通过技术来解决,尤其是像这类数量宏大的问题:excel表格如何疾速提取名字和电话号码,咱们不可能手动一个个去整顿,能够通过软件,金芝号码提取整顿助手,能够栢渡搜一下它,用它来疾速实现,操作简略,省时省力。应用辅助工具,当你的工作效率高了,那么你一天的工作将会播种感满满,身心轻松,也将更元气满满投入第二天的工作。

November 4, 2021 · 1 min · jiezi

关于virtual-dom:vue-源码解析322虚拟dom

后面写过一个snabbdom的解析,vue2.0版本用的就是这个,而后在他的根底上增加了一些性能vue-clic生成我的项目中的render 中的 h 函数,就是createElement()src/core/instance/render.js中创立h函数Vue.init 的时候会调用initRender 初始化_render, 在 vm._render() 中调用了,用户传递的或者编译生成的 render 函数,这个时候传递了 createElement。 vm.c 和 vm.$createElement 外部都调用了 createElement,不同的是最初一个参数。vm.c 在编译生成的render 函数外部会调用,vm.$createElement 在用户传入的 render 函数外部调用。当用户传入render 函数的时候,要对用户传入的参数做解决 通过前一篇vm.$mount咱们晓得vue 外部通过这个挂载了元素,这个办法最初执行了mountComponent办法 这个办法定义了updateComponent,updateComponent中通过vm._render()(外面调用vm._c或者vm.$createElement)生成虚构dom,而后vm._update比照 两次的虚构dom进行更新.创立渲染Watcher时会调用一次updateComponent来渲染dom.后续属性变动时 放入队列的渲染watcher,最初执行run()的时候,会调用updateComponent来进行比照更新,能够联合我上一篇一起看. 而后该看vm._c和vm.$createElement也就是h函数 外部调用createElement生成vNode并返回。 createElement 相似snabbdom的h函数咱们关注重点不同局部 export function _createElement ( context: Component, tag?: string | Class<Component> | Function | Object, data?: VNodeData, children?: any, normalizationType?: number): VNode | Array<VNode> { if (isDef(data) && isDef((data: any).__ob__)) { process.env.NODE_ENV !== 'production' && warn( `Avoid using observed data object as vnode data: ${JSON.stringify(data)}\n` + 'Always create fresh vnode data objects in each render!', context ) return createEmptyVNode() } // <component v-bind:is="currentTabComponent"></component> // object syntax in v-bind if (isDef(data) && isDef(data.is)) { tag = data.is } if (!tag) { // in case of component :is set to falsy value return createEmptyVNode() } // warn against non-primitive key if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.key) && !isPrimitive(data.key) ) { if (!__WEEX__ || !('@binding' in data.key)) { warn( 'Avoid using non-primitive value as key, ' + 'use string/number value instead.', context ) } } // support single function children as default scoped slot if (Array.isArray(children) && typeof children[0] === 'function' ) { data = data || {} data.scopedSlots = { default: children[0] } children.length = 0 } if (normalizationType === ALWAYS_NORMALIZE) { //返回一维数组,解决用户手写的 render //判断children的类型,如果是原始值的话转换成VNode的数组 //如果是数组的话,持续解决数组中的元素 //如果数组中的子元素又是数组(slottemplate),递归解决 //如果间断两个节点都是字符串会合并文本节点 children = normalizeChildren(children) } else if (normalizationType === SIMPLE_NORMALIZE) { // 把二维数组,转换成一维数组 //如果children中有函数组件的话,函数组件会返回数组模式 //这时候children就是一个二维数组,只须要把二维数组转换为一维数组 children = simpleNormalizeChildren(children) } let vnode, ns //判断tag是字符串还是组件 if (typeof tag === 'string') { let Ctor ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag) // 是否是 html 的保留标签 if (config.isReservedTag(tag)) { // platform built-in elements if (process.env.NODE_ENV !== 'production' && isDef(data) && isDef(data.nativeOn)) { warn( `The .native modifier for v-on is only valid on components but it was used on <${tag}>.`, context ) } ////如果是浏览器的保留标签,创立对应的VNode vnode = new VNode( config.parsePlatformTagName(tag), data, children, undefined, undefined, context ) // 判断是否是 自定义组件 } else if ((!data || !data.pre) && isDef(Ctor = resolveAsset(context.$options, 'components', tag))) { // 查找自定义组件构造函数的申明 // 依据 Ctor 创立组件的 VNode // component vnode = createComponent(Ctor, data, context, children, tag) } else { // unknown or unlisted namespaced elements // check at runtime because it may get assigned a namespace when its // parent normalizes children vnode = new VNode( tag, data, children, undefined, undefined, context ) } } else { // direct component options / constructor vnode = createComponent(tag, data, context, children) } if (Array.isArray(vnode)) { return vnode } else if (isDef(vnode)) { if (isDef(ns)) applyNS(vnode, ns) if (isDef(data)) registerDeepBindings(data) return vnode } else { return createEmptyVNode() }}这里虚构dom 和snabbdom不太一样,vue中的vNode属性更多,咱们目前只关注咱们要的就能够了(关注和snabbdom一样)。 ...

December 29, 2020 · 6 min · jiezi