精华内容
下载资源
问答
  • 一键对账工具

    2013-10-12 17:24:21
    一键对账工具
  • K3固定资产与总账对账工具
  • K3仓存与总账对账工具
  • 成本与总账对账工具

    2015-07-10 15:32:37
    K3系统成本与总账对账工具,支持总账账务处理与成本数据差异分析
  • 银行对账工具

    2014-05-09 19:24:19
    财务人员月底对账如果数据量大,就很头疼。用这个东西一下就出来了。
  • 一个很好的银行对账工具软件

    千次阅读 2017-12-22 19:56:11
    一个很好的银行对账工具软件: [软件下载]

    一个很好的银行对账工具软件:

    [软件下载]

    展开全文
  • 银行对账工具更新版

    2019-10-23 13:51:03
    几年前刚学VBA,写过一个银行流水和ERP系统做账记录进行金额比对的工具。做为一名财务人员,经常会遇到这样的需求。 当时只是为了学习VBA字典,数组等知识而写,多年使用中发现有很多问题,最难受的就是效率一般,...

    几年前刚学VBA,写过一个银行流水和ERP系统做账记录进行金额比对的工具。做为一名财务人员,经常会遇到这样的需求。

    当时只是为了学习VBA字典,数组等知识而写,多年使用中发现有很多问题,最难受的就是效率一般,数据量特别大的时候,明显

    有卡顿,一直想重新写一个,但平时实质比较忙,加上早已经不把VBA作为主技能树。所以一直没放在心上,最近有很多同事说喜

    欢用我写的这个小工具,突然就有了一种责任感。于是重新写了一版。

    一气呵成,简单的测试了一下。难免有逻辑漏洞,欢迎喜欢的朋友们下载使用,发现错误,提出建议。

    地址是:下载地址

    很久没有上传资源,今天上传一下发现下载积分是5,并且没找到可以修改积分的地方,对于我这样的爱好共享的人来说,实在不

    忍心。所以把代码放下面。

    你可以根据放到VBA的模块里。

     

     

    Option Base 1
    
    Sub compare()
    
    
    Dim arr1, arr2 'arr1,2,分别存储2列原始数据
    
    Dim restarr1(), restarr2() '分别存储arr1,2 相对多的数据  或者说结果要展示的2列数据
    Dim i, j, k, m, n, start
    Dim find As Boolean
    Dim sh As Worksheet
    
    Application.ScreenUpdating = False
    
    Set sh = ThisWorkbook.Sheets("数据比对") '这个根据你自己的工作表设置
    With sh
    
    .Columns("e:h").ClearContents
    
    '老样子数据分别A,C两列
    '差异分别放在E G两列
    arr1 = Application.Transpose(.Range("a2:a" & .[a65536].End(xlUp).Row)) 
    arr2 = Application.Transpose(.Range("c2:c" & .[c65536].End(xlUp).Row))
    
    End With
    
    start = 1
    k = 1
    m = 1
    [e1] = [a1] & "多的数据"
    [g1] = [c1] & "多的数据"
    
    On Error GoTo ErrCateg
    
    For i = 1 To UBound(arr1)
            
            find = False
              
              
            For j = start To UBound(arr2)
                        
                        If arr2(j) = arr1(i) Then
                         
                            find = True
                            start = j + 1
                            Exit For
                        
                        ElseIf arr2(j) > arr1(i) Then
                            start = j
                            Exit For
                            
                        Else
                             ReDim Preserve restarr2(1 To k)
                             restarr2(k) = arr2(j)
                             k = k + 1
                             start = start + 1
                 
               
                        End If
               Next
               
             If find = False Then  '如果没有相等的,那么A列的这个数字就是 A列多出的。
             
                ReDim Preserve restarr1(1 To m)
                restarr1(m) = arr1(i)
                m = m + 1
                End If
    
    Next
    
    
    
    If start <= UBound(arr2) Then
    
    For n = start To UBound(arr2)
         ReDim Preserve restarr2(1 To k)
                    restarr2(k) = arr2(n)
                    k = k + 1
    Next
    
    
    End If
    
    
    
    If m > 1 Then ' 如果A列有多的数据那么显示。 如果没有的话 下面的语句会出错,所以需要m 判断一下
    [e2].Resize(m - 1, 1) = Application.Transpose(restarr1)
    End If
    
    If k > 1 Then
    
    [g2].Resize(k - 1, 1) = Application.Transpose(restarr2)
    End If
    
    Application.ScreenUpdating = True
    
    Exit Sub
    
    ErrCateg:
    
    MsgBox "请确保每列数据至少有2个!"
    
    Application.ScreenUpdating = True
    
    End Sub
    

     

    补充:

    因为是在原来的版本基础上修改代码。自动排序的代码没改动,所以没提供,如果需要的话请继续看下面。

    在VBE中点击放数据的Sheet,然后选择 worksheet 对象的 change 方法 

    应该会自动把方法体构建好。最后代码如下:A,C,E,G是用到数据列以及差异展示列。请自己根据你的情况修改。

    Private Sub Worksheet_Change(ByVal Target As Range)
        Range("A:A").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
            :=xlPinYin, DataOption1:=xlSortNormal
        Range("C:C").Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
            :=xlPinYin, DataOption1:=xlSortNormal
            Range("E:E").Sort Key1:=Range("E2"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
            :=xlPinYin, DataOption1:=xlSortNormal
            Range("G:G").Sort Key1:=Range("G2"), Order1:=xlAscending, Header:=xlYes, _
            OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
            :=xlPinYin, DataOption1:=xlSortNormal
    End Sub

     

    展开全文
  • 财务对账工具心得

    2018-09-20 18:06:00
     2、实时对账时间慢-------------------------直接改变对账方式,首先需要创建对账任务(参数设定好,开始任务时直接去)直接查询可以分多少批(总数/一页多少条),然后后台用定时任务处理,在每条记录后添加一个...

    初级想法

      刚拿到任务时,以为就是拿文件的数据与数据库中的数据比较。没什么大不了的,可是数据量过大,不管是后台还是数据库都承受不了,文件导入时文件不可过大,本想在前台进行切割文件然后逐一进行上传,可是前台也受不了,最后只能人为进行对文件切割每个文件不管是大小和数据量都有限制,不然后台占用访问长,后台自动断掉,数据不完整。自己就在读文件时直接在后台写入redis缓存中,虽然时间有些长,但是至少数据保存住了,可以进行查询比较。减少数据库的访问次数。

      遇到问题:1、导入文件过大、数据量大导致访问时间长,-----------------人工进行切割,每个文件的数据量在18万条左右,大小在10m左右。

              2、需求不明确,自己没弄懂---------------开发时,需求是不明确的,自己仍要继续进行设计,让整个项目设计满足需求,每次都是问别人细节问题,殊不知整个需求自己都没弄懂

              3、对比数据量在万级别,数据全放到后台跑不开,------------导入文件时直接导入redis中(自己使用map类型的有键值对的,以比较的关键字为键),保证一边数据是完整的,然后从数据库中取出几千条数据和redis中数据的键比较,一样的移除留住不一样的,然后将自己标记的数据遍历取出来放到页面中

    中级想法

      以上比较数据慢,是实时的比较,前台等的时间过长,很有可能直接断掉。开始在表上做手脚。然后导入文件时直接按条 读取,每100条数据时就访问数据库insert数据,最后将数据保存在数据库中,所有的对账直接用SQL跑。语句用的是左连接右连接直接找出两个表中的差异数据

    1 select * from t1 left join t2 where t1.id = t2.id and t2.id is null 
    2 union
    3 select * from t1 right join t2 where t1.id = t2.id and t1.id is null

    where 后面的条件自己按需求添加。

      遇到问题: 1、SQL跑的时间慢,数据量在百万级。-----------------首先自己想到的是分页只差不几条慢慢展示给用户。可是SQL跑的是对最后的结果进行分页,最关键的左右连接的时间没有减少

              2、实时对账时间慢-------------------------直接改变对账方式,首先需要创建对账任务(参数设定好,开始任务时直接去)直接查询可以分多少批(总数/一页多少条),然后后台用定时任务处理,在每条记录后添加一个是否比较的字段,一样的勾上。查询时直接查勋两个信息表没对上的数据,主要是开始了分批跑,取出一批数据(只取关键比较的一个字段)时,直接放到list中并在mybatis中遍历放到in语句里跟另一个表所有数据比较,自己根据自己的查询条件建立索引,不然相当慢,当所有批都跑完之后修改任务状态为完成状态,下次任务就取不到这个任务了

     

     1 update t_pay_core_order t1,t_pay_bill_file_detail t2
     2            set t1.is_check = 1,t2.is_check = 1
     3         WHERE 
     4         t1.pay_order_no = t2.pay_order_no
     5         and t2.pay_order_no in
     6         <foreach item="payOrderNo" index="index"  collection="orderlist" open="(" separator="," close=")">
     7                 #{payOrderNo,jdbcType=VARCHAR}
     8         </foreach>
     9         and t1.trans_date &gt;= #{startTime,jdbcType=INTEGER} 
    10         and t1.trans_date &lt;= #{endTime,jdbcType=INTEGER}
    11         and t1.pay_channel_id = #{payChannelId,jdbcType=TINYINT}
    12         and t1.trans_type = #{transType,jdbcType=TINYINT}

     

    这是我mybatis里的SQL语句。目前还是可以跑起来的。

     后期优化

      导入数据使用银行接口减少人工导入文件的干预,将接口暴露且使用定时任务进行拉取必要的数据(默认为昨天的数据,传参数指定收款与付款)该接口也可用于页面的按钮参数固定,指定日期直接导入数据

    转载于:https://www.cnblogs.com/guoxiaoyu/p/9682417.html

    展开全文
  • QQ:236075712 http://www.pubwin2009.com
  • 工行建行对账单转换工具工行建行对账单转换工具工行建行对账单转换工具工行建行对账单转换工具工行建行对账单转换工具
  • VBA 自动对账工具

    2019-10-23 19:10:21
    免费下载。不知道怎么把下载积分搞为0,之前可以设置,现在CSDN好像不能,或者说不好找。文章中有代码。欢迎大家使用。提出错误和建议。
  • 用友对账单 导入工具 自己装 ado 控件
  • 中行对账单打印工具

    2018-11-08 17:16:57
    银行通知单打印,可以换成其他通知单打印。涉及PDF文件生成、条码生成打印、文本文件数据读取等,通知单可直接打印,也可以生成PDF文件再合并打印,以便提高打印速度。需要看代码的可以输入工程密码,密码是我的...
  • 主要用于用友软件总账与明细账或辅助账对账不平检查工具
  • 当时开发该工具的背景是,需要每天定时处理大批量的对账单txt文本信息,将其统一整合到一张Excel文档上,供会计人员获取。在没有该工具之前,项目组上的会计人员,需要每天手动打开大量txt文本,并从每份txt文档里,...

    原创/朱季谦

     

    这款工具是笔者在2018年初开发完成的,时隔两载,偶然想起这款小工具,于是,决定将其开源,若有人需要做类似Java批处理实现整理文档的工具,可参考该工具逻辑思路来实现。

     

    该工具是运行在windos系统上的,基于bat脚本与jar包形式协同运行。当时开发该工具的背景是,需要每天定时处理大批量的对账单txt文本信息,将其统一整合到一张Excel文档上,供会计人员获取。在没有该工具之前,项目组上的会计人员,需要每天手动打开大量txt文本,并从每份txt文档里,复制所需信息,然后将获取到的信息再复制到一份当日的Excel文档里。这个过程根据对账单数量而定,若数量过多,手动整理就需花费大量时间,且过程重复操作。基于这个原因,当时就开发了这款小工具,供会计人员使用,其带来的效果是,节省了大量整理时间:会计人员只需把每天邮件收到的批量对账单txt文件,统一放到指定目录下,点击start启动脚本,就可一键自动批量处理完成。

     

    这个工具在当时的工作环境下,是行之有效的,但若换到另一种领域或者环境,还需二次开发做修改。工具整体实现的逻辑并不复杂,笔者只提供一种解决文档重复整理工作的小思路,仅做参考学习之用,毕竟,解决问题的本质不在于工具,而在于思路。

     

    下面,就围绕着业务与具体实现来结束该自动处理工具。

     

    整体结构如下:

    image

    1.对账单:将同类型对账单批量放入到对账单文件夹中,同类,即格式几乎一样,但数据不一样,如下所示:

    image

    2.对账单集处理结果:批量处理获取到的数据,会统一写入到一份自动生成的Excel文档里,该文档存放在“对账单集处理结果”目录底下;

    3.Auto.jar:由Java语言开发的jar包,通过循环读取各txt文本数据,从读取文本指定字段数据,截取其名字与对应保证金、可用资金,再写入到自动生成的Excel文档里。

    4.CopyName.bat:bat脚本,将本目录下的txt文件名批量写入到“对账单批量名字集合.txt”;

    CopyName.bat如下:

    1 @dir /a-d /b *.txt>对账单批量名字集合.txt

    5.Start.bat:bat脚本,主要实现是,将CopyName.bat和“对账单批量名字集合.txt”都复制到“对账单”目录,然后执行CopyName.bat,将该目录底下的所有.txt后缀的文件名,写入到“对账单批量名字集合.txt”,再启动Auto.jar包,该jar会去“对账单批量名字集合.txt”获取所在目录下各txt文档名字,再根据这些名字去读取对应的txt文档。

    Start.bat主要代码如下:

    1 @echo off
    2 copy /y CopyName.bat 对账单
    3 copy /y 对账单批量名字集合.txt 对账单
    4 cd D:\批量处理对账单\对账单
    5 call CopyName.bat
    6 java -jar D:\批量处理对账单\Auto.jar

    综上,业务人员只需把对账单统一放入到“对账单”目录下:

    image

    点击Start.bat启动,就可得到以下指定数据的统一获取:

    image

    接下来,就具体分享一下Java部分的逻辑实现:

    代码结构

    image

    以maven进行jar依赖,主要有Datas、ExportExcelBase、ExportExcleClient、PutExcel四个类。

    1.引入依赖

     1 <dependencies>
     2      <dependency>
     3          <groupId>org.apache.poi</groupId>
     4          <artifactId>poi</artifactId>
     5          <version>3.10-FINAL</version>
     6      </dependency>
     7      <dependency>
     8          <groupId>org.projectlombok</groupId>
     9          <artifactId>lombok</artifactId>
    10          <version>1.18.2</version>
    11      </dependency>
    12 </dependencies>

    2.设置导出基本类,根据需生成的Excel展示数据设置,笔者案例里只需展示“组合名”,“保证金占用金额”,“可用资金额”三个字段,故只需设置name,margin,avaFunds来接受获取到的值;

     1 package com.put.data;
     2 import lombok.Data;
     3 ​
     4 /**
     5  * 导出数据类
     6  * @author zhujiqian
     7  * @date 2020/10/27 20:09
     8  */
     9 @Data
    10 public class Datas {
    11     //名字
    12     private String name;
    13     //保证金
    14     private String margin;
    15     //可用资金
    16     private String avaFunds;
    17     
    18     public Datas(String name, String margin, String avaFunds) {
    19         this.name = name;
    20         this.margin = margin;
    21         this.avaFunds = avaFunds;
    22    }
    23 ​
    24 }

    3.设置Excel表格生成类

      1 package com.put.put;
      2 ​
      3 import org.apache.poi.hssf.usermodel.*;
      4 import org.apache.poi.hssf.util.Region;
      5 ​
      6 import java.io.File;
      7 import java.io.FileNotFoundException;
      8 import java.io.FileOutputStream;
      9 import java.io.IOException;
     10 ​
     11 /**
     12  * HSSF - 提供读写Microsoft Excel格式档案的功能。
     13  *
     14  * XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
     15  *
     16  * @author zhujiqian
     17  * @date 2020/10/27 20:33
     18  */
     19 public class ExportExcelBase {
     20     private HSSFWorkbook hwb=null;
     21     private HSSFSheet sheet=null;
     22     public ExportExcelBase(HSSFWorkbook hwb,HSSFSheet sheet){
     23         this.hwb=hwb;
     24         this.sheet=sheet;
     25    }
     26     public HSSFWorkbook getHwb() {
     27         return hwb;
     28    }
     29     public void setHwb(HSSFWorkbook hwb) {
     30         this.hwb = hwb;
     31    }
     32     public HSSFSheet getSheet() {
     33         return sheet;
     34    }
     35     public void setSheet(HSSFSheet sheet) {
     36         this.sheet = sheet;
     37    }
     38 ​
     39     /**
     40      * 创建设置表格头
     41      */
     42     public void createNormalHead(String headString,int colSum){
     43         //创建表格标题行,第一行
     44         HSSFRow row=this.sheet.createRow(0);
     45         //创建指定行的列,第一列
     46         HSSFCell cell=row.createCell(0);
     47         //设置标题行默认行高
     48         row.setHeight((short) 500);
     49         //设置表格内容类型:0-数值型;1-字符串;2-公式型;3-空值;4-布尔型;5-错误
     50         cell.setCellType(1);
     51         //设置表格标题内容
     52         cell.setCellValue(new HSSFRichTextString(headString));
     53         // 指定合并区域
     54         this.sheet.addMergedRegion(new Region(0, (short)0, 0, (short)colSum));
     55         // 定义单元格格式,添加单元格表样式,并添加到工作簿
     56         HSSFCellStyle cellStyle=this.hwb.createCellStyle();
     57         // 设置单元格水平对齐居中类型
     58         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
     59         // 指定单元格垂直居中对齐
     60         cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
     61         // 指定单元格自动换行
     62         cellStyle.setWrapText(true);
     63         //设置字体
     64         HSSFFont font=this.hwb.createFont();
     65         font.setBoldweight((short) 700);
     66         font.setFontName("宋体");
     67         font.setFontHeight((short) 300);
     68         cellStyle.setFont(font);
     69         cell.setCellStyle(cellStyle);
     70    }
     71 ​
     72     /**
     73      *表单第二行
     74      * @param params
     75      * @param colSum
     76      */
     77     public void createNormalTwoRow(String[] params,int colSum){
     78         HSSFRow row1=this.sheet.createRow(1);
     79         row1.setHeight((short) 300);
     80         HSSFCell cell2=row1.createCell(0);
     81         cell2.setCellType(1);
     82         cell2.setCellValue(new HSSFRichTextString("统计时间"+params[0]+"至"+params[1]));
     83         this.sheet.addMergedRegion(new Region(1, (short) 0,1,(short)colSum));
     84         HSSFCellStyle cellStyle=this.hwb.createCellStyle();
     85         cellStyle.setAlignment((short) 2);
     86         cellStyle.setVerticalAlignment((short) 1);
     87         cellStyle.setWrapText(true);
     88         HSSFFont font=this.hwb.createFont();
     89         font.setBoldweight((short) 700);
     90         font.setFontName("宋体");
     91         font.setFontHeight((short) 250);
     92         cellStyle.setFont(font);
     93         cell2.setCellStyle(cellStyle);
     94    }
     95 ​
     96 ​
     97     /**
     98      * 表单内容
     99      * @param wb
    100      * @param row
    101      * @param col
    102      * @param align
    103      * @param val
    104      */
    105     public void cteateCell(HSSFWorkbook wb, HSSFRow row, int col, short align, String val) {
    106         HSSFCell cell = row.createCell(col);
    107         cell.setCellType(1);
    108         cell.setCellValue(new HSSFRichTextString(val));
    109         HSSFCellStyle cellstyle = wb.createCellStyle();
    110         cellstyle.setAlignment(align);
    111         cell.setCellStyle(cellstyle);
    112    }
    113 ​
    114 ​
    115     /**
    116      * 文档输出流
    117      * @param fileName
    118      */
    119     public void outputExcle(String fileName) {
    120         FileOutputStream fos = null;
    121         try {
    122             fos = new FileOutputStream(new File(fileName));
    123             this.hwb.write(fos);
    124             fos.close();
    125        } catch (FileNotFoundException var4) {
    126             var4.printStackTrace();
    127        } catch (IOException var5) {
    128             var5.printStackTrace();
    129        }
    130    }
    131 }

    4.设置Excel根据数据导出类

    1 package com.put.put;
     2 ​
     3 ​
     4 import com.put.data.Datas;
     5 import org.apache.poi.hssf.usermodel.*;
     6 ​
     7 import java.text.SimpleDateFormat;
     8 import java.util.Date;
     9 import java.util.List;
    10 ​
    11 /**
    12  * TODO
    13  *
    14  * @author zhujiqian
    15  * @date 2020/10/27 20:24
    16  */
    17 public class ExportExcleClient {
    18     private HSSFWorkbook hwb=null;
    19     private HSSFSheet sheet=null;
    20 ​
    21     ExportExcelBase exportExcel = null;
    22     SimpleDateFormat df = new SimpleDateFormat("yyyy年MM月dd日");
    23 ​
    24     public ExportExcleClient() {
    25         this.hwb = new HSSFWorkbook();
    26         this.exportExcel = new ExportExcelBase(this.hwb, this.sheet);
    27    }
    28 ​
    29     /**
    30      * 导出Excel
    31      * @return
    32      */
    33     public String exportExcel() {
    34         String a = this.df.format(new Date()) + "对账单集合.xls";
    35         String b = "D:\\批量处理对账单\\对账单集处理结果\\" + a;
    36         this.exportExcel.outputExcle(b);
    37         return b;
    38    }
    39 ​
    40     /**
    41      * 设置导出格式
    42      * @param data
    43      * @return
    44      */
    45     public String alldata(List<Datas> data) {
    46         if (data.size() != 0) {
    47             this.sheet = this.exportExcel.getHwb().createSheet("对账单集合");
    48             this.exportExcel.setSheet(this.sheet);
    49             int number = 2;
    50 ​
    51             for(int i = 0; i < number; ++i) {
    52                 this.sheet.setColumnWidth(i, 8000);
    53            }
    54 ​
    55             HSSFCellStyle cellStyle = this.hwb.createCellStyle();
    56             cellStyle.setAlignment((short)2);
    57             cellStyle.setVerticalAlignment((short)1);
    58             cellStyle.setWrapText(true);
    59             HSSFFont font = this.hwb.createFont();
    60             font.setBoldweight((short)700);
    61             font.setFontName("宋体");
    62             font.setFontHeight((short)200);
    63             cellStyle.setFont(font);
    64             this.exportExcel.createNormalHead("对账单整合表", number);
    65             String[] params = new String[]{this.df.format(new Date()), this.df.format(new Date())};
    66             this.exportExcel.createNormalTwoRow(params, number);
    67             HSSFRow row2 = this.sheet.createRow(2);
    68             HSSFCell cell0 = row2.createCell(0);
    69             cell0.setCellStyle(cellStyle);
    70             cell0.setCellValue(new HSSFRichTextString("组合名"));
    71             HSSFCell cell1 = row2.createCell(1);
    72             cell1.setCellStyle(cellStyle);
    73             cell1.setCellValue(new HSSFRichTextString("保证金占用金额"));
    74             HSSFCell cell2 = row2.createCell(2);
    75             cell2.setCellStyle(cellStyle);
    76             cell2.setCellValue(new HSSFRichTextString("可用资金额"));
    77 ​
    78             for(int i = 0; i < data.size(); ++i) {
    79                 System.out.println("==============" + ((Datas)data.get(i)).getName() + " " + ((Datas)data.get(i)).getMargin() + " " + ((Datas)data.get(i)).getAvaFunds());
    80                 HSSFRow row = this.sheet.createRow((short)i + 3);
    81                 this.exportExcel.cteateCell(this.hwb, row, 0, (short)6, ((Datas)data.get(i)).getName());
    82                 this.exportExcel.cteateCell(this.hwb, row, 1, (short)6, ((Datas)data.get(i)).getMargin());
    83                 this.exportExcel.cteateCell(this.hwb, row, 2, (short)6, ((Datas)data.get(i)).getAvaFunds());
    84            }
    85        }
    86 ​
    87         return "";
    88    }
    89 }

    5.批量读取txt文本截取指定数据类

      1 package com.put;
      2 ​
      3 import com.put.data.Datas;
      4 import com.put.put.ExportExcleClient;
      5 import java.io.*;
      6 import java.util.ArrayList;
      7 import java.util.List;
      8 ​
      9 /**
     10  * TODO
     11  *
     12  * @author zhujiqian
     13  * @date 2020/10/27 20:08
     14  */
     15 public class PutExcel {
     16     public PutExcel() {
     17    }
     18     public static List<String> readTxtFile1(String TxtName, String filePath) {
     19         ArrayList list = new ArrayList();
     20         try {
     21             System.out.println("该组合:" + TxtName);
     22             File file = new File(filePath);
     23             if (file.isFile() && file.exists()) {
     24                 InputStreamReader read = new InputStreamReader(new FileInputStream(file), "GBK");
     25                 BufferedReader bufferedReader = new BufferedReader(read);
     26                 String lineTxt = null;
     27 ​
     28                 while(true) {
     29                     do {
     30                         if ((lineTxt = bufferedReader.readLine()) == null) {
     31                             read.close();
     32                             return list;
     33                        }
     34                    } while(!lineTxt.contains("持仓保证金:") && !lineTxt.contains("保证金占用:") && !lineTxt.contains("保证金占用 Margin Occupied:") && !lineTxt.contains("保证金占用 Margin Occupied:"));
     35                     String ZiJin;
     36                     int a;
     37                     String b;
     38                     int c;
     39                     String d;
     40                     int e;
     41                     int f;
     42                     String E;
     43                     if (lineTxt.contains("持仓保证金:")) {
     44                         ZiJin = lineTxt.replace(" ", "");
     45                         a = ZiJin.indexOf("持");
     46                         b = ZiJin.substring(a);
     47                         c = b.indexOf(".");
     48                         d = b.substring(0, c + 3);
     49                         e = d.indexOf(":");
     50                         f = d.length();
     51                         E = d.substring(e + 1, f);
     52                         list.add(E);
     53                    } else if (lineTxt.contains("保证金占用:")) {
     54                         ZiJin = lineTxt.replace(" ", "");
     55                         a = ZiJin.indexOf("保");
     56                         b = ZiJin.substring(a);
     57                         c = b.indexOf(".");
     58                         d = b.substring(0, c + 3);
     59                         e = d.indexOf(":");
     60                         f = d.length();
     61                         E = d.substring(e + 1, f);
     62                         list.add(E);
     63                    } else if (lineTxt.contains("保证金占用 Margin Occupied:")) {
     64                         ZiJin = lineTxt.replace(" ", "");
     65                         a = ZiJin.indexOf("保");
     66                         b = ZiJin.substring(a);
     67                         c = b.indexOf(".");
     68                         d = b.substring(0, c + 3);
     69                         e = d.indexOf(":");
     70                         f = d.length();
     71                         E = d.substring(e + 1, f);
     72                         list.add(E);
     73                    } else if (lineTxt.contains("保证金占用 Margin Occupied:")) {
     74                         ZiJin = lineTxt.replace(" ", "");
     75                         a = ZiJin.indexOf("保");
     76                         b = ZiJin.substring(a);
     77                         c = b.indexOf(".");
     78                         d = b.substring(0, c + 3);
     79                         e = d.indexOf(":");
     80                         f = d.length();
     81                         E = d.substring(e + 1, f);
     82                         list.add(E);
     83                    }
     84                }
     85            } else {
     86                 System.out.println("找不到指定的文件");
     87            }
     88        } catch (Exception var16) {
     89             System.out.println("读取文件内容出错");
     90             var16.printStackTrace();
     91        }
     92         return list;
     93    }
     94     public static List<String> readTxtFile2(String TxtName, String filePath) {
     95         ArrayList list = new ArrayList();
     96 ​
     97         try {
     98 ​
     99             System.out.println("该组合:" + TxtName);
    100             File file = new File(filePath);
    101             if (file.isFile() && file.exists()) {
    102                 InputStreamReader read = new InputStreamReader(new FileInputStream(file), "GBK");
    103                 BufferedReader bufferedReader = new BufferedReader(read);
    104                 String lineTxt = null;
    105 ​
    106                 while(true) {
    107                     do {
    108                         if ((lineTxt = bufferedReader.readLine()) == null) {
    109                             read.close();
    110                             return list;
    111                        }
    112                    } while(!lineTxt.contains("可用资金:") && !lineTxt.contains("可用资金 Fund Avail.:") && !lineTxt.contains("可用资金 Fund Avail.:"));
    113                     String ZiJin;
    114                     int a;
    115                     String b;
    116                     int c;
    117                     String d;
    118                     int e;
    119                     int f;
    120                     String E;
    121                     if (lineTxt.contains("可用资金:")) {
    122                         ZiJin = lineTxt.replace(" ", "");
    123                         ZiJin = lineTxt.replace(" ", "");
    124                         a = ZiJin.indexOf("可");
    125                         b = ZiJin.substring(a);
    126                         c = b.indexOf(".");
    127                         d = b.substring(0, c + 3);
    128                         e = d.indexOf(":");
    129                         f = d.length();
    130                         E = d.substring(e + 1, f);
    131                         list.add(E);
    132                    } else if (lineTxt.contains("可用资金 Fund Avail.:")) {
    133                         ZiJin = lineTxt.replace(" ", "");
    134                         ZiJin = lineTxt.replace(" ", "");
    135                         a = ZiJin.indexOf("可");
    136                         b = ZiJin.substring(a);
    137                         c = b.lastIndexOf(".");
    138                         d = b.substring(0, c + 3);
    139                         e = d.indexOf(":");
    140                         f = d.length();
    141                         E = d.substring(e + 1, f);
    142                         list.add(E);
    143                    } else if (lineTxt.contains("可用资金 Fund Avail.:")) {
    144                         lineTxt.replace(" ", "");
    145                         ZiJin = lineTxt.replace(" ", "");
    146                         a = ZiJin.indexOf("可");
    147                         b = ZiJin.substring(a);
    148                         c = b.lastIndexOf(".");
    149                         d = b.substring(0, c + 3);
    150                         e = d.indexOf(":");
    151                         f = d.length();
    152                         E = d.substring(e + 1, f);
    153                         list.add(E);
    154                    }
    155                }
    156            } else {
    157                 System.out.println("找不到指定的文件");
    158            }
    159        } catch (Exception var16) {
    160             System.out.println("读取文件内容出错");
    161             var16.printStackTrace();
    162        }
    163 ​
    164         return list;
    165    }
    166 ​
    167     public static void main(String[] argv) {
    168         String path = "D:\\批量处理对账单\\对账单\\对账单批量名字集合.txt";
    169         List<String> nums = writeToDat(path);
    170         List<Datas> listData = new ArrayList();
    171         for(int i = 0; i < nums.size(); ++i) {
    172             if (!(nums.get(i)).equals("对账单批量名字集合.txt")) {
    173                 listData.add(ZuHe(nums.get(i)));
    174                 System.out.println("--------==========" + ZuHe(nums.get(i)));
    175            }
    176        }
    177 ​
    178         System.out.println("-----------" + listData);
    179         ExportExcleClient client = new ExportExcleClient();
    180         client.alldata(listData);
    181         String url = client.exportExcel();
    182         System.out.println(url);
    183    }
    184 ​
    185     public static Datas ZuHe(String TxtName) {
    186         String address = "D:\\批量处理对账单\\对账单\\" + TxtName;
    187         List<String> r1 = readTxtFile1(TxtName, address);
    188         List<String> r2 = readTxtFile2(TxtName, address);
    189         int c = TxtName.indexOf(".");
    190         String txt = TxtName.substring(0, c);
    191         System.out.println(txt);
    192         System.out.println(r1);
    193         Datas d = null;
    194         if (r1.isEmpty() && r2.isEmpty()) {
    195             if (r1.isEmpty() && r2.isEmpty()) {
    196                 System.out.println(txt + "--" + r1 + "---" + r2);
    197                 d = new Datas(txt, "无", "无");
    198            }
    199        } else {
    200             d = new Datas(txt, r1.get(0), r2.get(0));
    201        }
    202         return d;
    203    }
    204     public static List<String> writeToDat(String path) {
    205         File file = new File(path);
    206         ArrayList list = new ArrayList();
    207         try {
    208             String encoding = "GBK";
    209             InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
    210             BufferedReader bw = new BufferedReader(read);
    211             String line = null;
    212 ​
    213             while((line = bw.readLine()) != null) {
    214                 list.add(line);
    215            }
    216             bw.close();
    217        } catch (IOException var7) {
    218             var7.printStackTrace();
    219        }
    220         return list;
    221    }
    222 }

     

    以上的代码,大部分都是在2018年左右写成,现再阅读,代码风格甚为稚嫩。我没有做大的修改,原因是,想要留住这些代码最初的样子,就像留住刚毕业那会的记忆一般。整体实现逻辑并不算复杂,但再简单的东西,能解决问题,都是值得分享的东西。在此基础上,还可继续完善与扩展,给需要用到的业务人员带来方便。

    这是我开源的第一个小工具,以此为励,在以后的日子里,要更加深入地学习,并将所学与所得,多多分享。在我看来,输入的东西,不一定是自己的,但输出的,一定是自己的。

    这,就是我喜欢输出的原因之一。

     

    最后,附上第一个github源码链接:https://github.com/z924931408/auto-put-tool

    展开全文
  • 就是对账了,2边分别导入excel后,点击匹配,就会自己寻找相同的,或者可以匹配上的。 我做了3种匹配,由于js单线程,结果计算量太大没设计好,导致数据量太大会卡。应该传给worker异步计算然后返回浏览器哪些匹配再...
  • 对账

    2019-10-05 05:22:57
    为了可以更好地解释支付结算系统对账过程,我们先把业务从头到尾串起来描述一下场景,帮助大家理解:一个可能得不能再可能的场景,请大家深刻理解里面每个角色做了什么,获取了哪些信息:某日阳光灿烂,支付宝用户...
  • 银行对账单 用于处理和过滤银行对账单中交易的 Javascript 工具
  • 对账系统

    千次阅读 2017-08-13 21:11:35
    如何做一个对账系统 在互联网行业中只要涉及到支付,必然就会有对账的需求,几乎所有互联网公司的业务中多多少少的都会涉及到支付,大一点的公司甚至都标配有了自己的第三方支付公司,因此对账具有普遍性。对账...
  • 对账整体设计

    2019-11-27 14:27:27
    从整体来看,按照时序维度的先后,系统对账主要分为三阶段的工作。分别是数据准备、数据核对和差错处理。 数据准备细分一下,又分为文件获取、文件解析、数据清洗。 在对账专业概念中,数据核对和差错处理又叫轧账...
  • 传统的对账都是由财务手工线下进行的,使用账簿、凭证、表格等作为数据承载或辅助工具。随着时代发展,大量的交易数据再使用传统方式核对显然费时费力,不合时宜,所以产生了数据线上化和对账功能线上化的需求。 在...
  • 金蝶107个合集工具

    2018-09-25 13:08:46
    官方107个工具 现金管理与总账对账工具等。
  • 小小样对账系统

    2015-08-30 13:39:54
    封装的Excel 公式 盘点资金 系统对账 销售记录 历史查询 收银员小工具 vb编写小程序
  • 自动对账系统

    热门讨论 2012-11-02 11:48:56
    可以有效完成两个excel数据核对,通过有效选择内容,实现自动对账。是财务、审计、资金等行业工作人员的好帮手。
  • 在互联网行业中只要涉及到支付,必然就会有对账的需求,几乎所有互联网公司的业务中多多少少的都会涉及到支付,大一点的公司甚至都标配有了自己的第三方支付公司,因此对账具有普遍性。对账系统是支付体系中最重要的...
  • 最近接手了一个棘手的工作:微信下载对账单。 刚接手完全懵逼,怎么和微信对接啊。然后就是百度。。 终于找到了组织: 微信支付|开发文档 :点击跳转 通过文档我们可以看到,首先是: 1.下载对账单开放接口...
  • 银企对账软件

    2015-10-22 11:08:12
    1)快速导入(日记账、对账单)、快速勾兑、快速生成余额调节表。 (2)支持Excel2003、Excel2007、TXT等文件的导入。 (3)可以自定义不同银行的导入模板。 (4)支持手工录入账单、手工编辑账单、手工删除账单、手工勾兑...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,446
精华内容 1,778
关键字:

对账工具