使用Python在Excel中查找单元格而无需迭代

时间:2016-10-19 02:37:29

标签: excel parsing

我需要在数百个excel的单元格中找到值。 到目前为止,我通过迭代每一行来解析每个excel文件,但它太长了(超过文件超过3000行)。 但是当在excel中使用ctrl + f时,结果是实时的。

我的问题:如何在包含多行的excel文件中快速找到(比迭代更快)一个值。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这样做的方法是使用com自动化。

安装pythonnet以访问公共语言运行库(CLR)。在http://www.lfd.uci.edu/~gohlke/pythonlibs/#pythonnet处有预先构建的二进制文件。

https://github.com/pythonnet/pythonnet

我没有excel所以我无法为您提供功能示例,但您的代码最终会像示例中的示例:https://discourse.mcneel.com/t/close-an-excel-session-with-python/613

答案 1 :(得分:0)

根据Nurzhan的评论,这里是答案(在矩阵中复制excel文件,然后在3个条件下找到矩阵中的值):

    List<Observable<?>> observableList = new ArrayList<>();
    observableList.add(
            getUsers()
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.io())
                .flatMap(Observable::from)
                .doOnNext(user->insertUser(user))
                .toList()
    );
    observableList.add(
            getLocations()
                    .subscribeOn(Schedulers.io())
                    .observeOn(Schedulers.io())
                    .flatMap(Observable::from)
                    .doOnNext(location->insertLocation(location))
                    .toList()
    );

    Observable.zip(observableList, new FuncN<Object>() {
        @Override
        public Observable<?> call(Object...args) {
            return Observable.empty();
        }).subscribe(new Subscriber<Object>() {
            @Override
            public void onCompleted() {
                updateUserCache();
                updateLocationCache();
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Object o) {

            }
        });

通过在excel中迭代3000行,它大约是25秒,现在通过在矩阵中处理​​数据,结果不到一秒钟。