精华内容
下载资源
问答
  • 使用C#对Excel文件进行内容筛选

    千次阅读 2019-06-28 16:45:37
    一个使用C#编写的小工具,指定文件夹下的所有Excel文件进行筛选,如果一个文件中含有某个指定的字符串,记录该文件,并且定位这个字符串出现的位置。 网上使用C#对Excel文件进行读写的方法主要有四种: (1)...

    (一) 问题

    一个使用C#编写的小工具,对指定文件夹下的所有Excel文件进行筛选,如果一个文件中含有某个指定的字符串,记录该文件,并且定位这个字符串出现的位置。

    网上使用C#对Excel文件进行读写的方法主要有四种:

    (1)使用OleDb的方法读取Excel文件;

    (2)将xls文件转化为csv文件再进行读取;

    (3)使用NPOI进行Excel文件读取;

    (4)使用COM组件进行读取。


    (二)尝试

    这几种读取Excel文件的方法我都了解了一下,每种方法各有利弊。下面进行简单的描述:

    (1)使用OleDb的方法读取Excel文件

    这种方法相关内容在网上可以找到很多,很多人把这种方法当作读取Excel文件的主流。简单来说就是将Excel文件当作数据库进行操作,对表中内容使用sql语句进行提取,其间需要使用到DataSet类。

    顺便说一句,对于不同的.net数据提供者,ADO.NET采用不同的Connection对象连接数据库。这些Connection对我们屏蔽了实现的具体细节,并提供了一种统一的实现方式。Connection类有四种:SqlConnection、OleDbConnection、OdbcConnection和OracleConnection。分别用来连接SQL Server数据库、OLE DB数据库(如Access)、ODBC数据库、Oracle数据库。与数据库的所有通讯都是通过Connection对象完成的。本文简单谈一谈OleDb。

    建立OleDb连接的核心是建立连接字符串ConnectionString,主要注意的是,对xls文件(Excel2003)和xlsx文件(Excel2007)进行连接的连接字符串不同。假设excelPath为目的excel文件的路径,则建立OleDb连接的语句分别为:

    OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=yes;IMEX=1;\"");

    OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.12.0;Data Source=" + excelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=yes;IMEX=1;\"");

    其中"HDR=yes"是说Excel文件的第一列是列明而不是数。如果列中数据类型不一致,使用"IMEX=1"可以避免类型冲突。下面是一段网上的示例代码:

    public DataSet ExcelToDS(string Path)  
    {  
        string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";  
        OleDbConnection conn = new OleDbConnection(strConn);  
        conn.Open(); 
        string strExcel = "";  
        OleDbDataAdapter myCommand = null;  
        DataSet ds = null;  
        strExcel="select * from [sheet1$]";  
        myCommand = new OleDbDataAdapter(strExcel, strConn);  
        ds = new DataSet();  
        myCommand.Fill(ds,"table1");  
        return ds;  
    }

    但是在尝试这种方法解决问题的时候遇到了一些麻烦,比如说满足问题需要的Sql并不是很好写(数据库基本功稍差,惭愧)。另外在网上没有找到在使用OleDb读取文件的时候获取excel所有sheet表的方法(后来在另外一片博客中找到了,代码没有经过尝试:https://www.cnblogs.com/xifengyeluo/p/8617865.html)。再者DataSet数据类型也不是很熟悉,因此本方法没有继续下去。

    (2)将xls文件转化为csv文件再进行读取

    之前使用过Java读取xls文件,当时直接将xls文件当作csv文件(Comma-Separated Values File逗号分隔值文件)进行读取解析。C#也可以使用类似的方法读取xls文件,等价于使用文件流读取一个txt文本文件。

    同样附上一段示例代码:

    FileStream fs = new FileStream(excelPath, FileMode.Open, FileAccess.Read, FileShare.None);  
    StreamReader sr = new StreamReader(fs, System.Text.Encoding.GetEncoding(936));  
    string str = sr.ReadLine();  //读取表头
    string target = Console.ReadLine();   //输入想要查询的字符串
    while (str != null)  
    {      
        int count = 0;
        str = sr.ReadLine();
        string[] strs = str.Split(',');  
        foreach(string s in strs)
        {
            if(s == target)
                Console.WriteLine(++count);
        }  
    }     
    sr.Close();

    将xls文件转化为csv文件最大的问题在于分隔符的问题。一般来说,使用这种方法读取的时候,我们每读取一行字符串相当于读取了xls文件中的一行,之后会使用Split(‘,’)方法进行字符串分割从而获得表中的每一单元格的数据。但是如果原本xls正文中有逗号的话,分割会出现错误。另外还有很多问题需要考虑,比如说:一个文件多个sheet的获取方法、定位当前的单元格的方法、这种方法的实现有很多字符串操作。所以这种使用数据流来读取xls的方法并不“优美”。

    (3)使用NPOI进行Excel文件读取

    这种方法能够查阅到的资料过少,因此没有进行尝试。有时间的话,了解一下再来补充。

    (4)使用COM组件进行读取

    这种方法需要先引用Microsoft.Office.interop.Excel。可以很灵活的读取Excel中的数据,而且使用方式很丰富,基本上凡是打开OfficeExcel软件能够用鼠标点击完成的事,调用COM组件都能完成,而且可以调用Excel自身带的宏方法。

    添加COM组件引用的过程如下图所示,使用的编译器为VS2017:

    一个最直接的想法就是使用COM组件按照行列依次读取Excel文件中每个sheet的单元格,具体代码如下:

    static void ReadExcel(string path, string target)
    {
        Console.WriteLine(path);
        try
        {
            //如果要读取多个Excel文件建议将下面两个变量的声明和初始化放在全局变量的位置
            //每新建一次Excel.Application都相当于打开了一次Excel.exe,将其声明为全局变量可以提高性能
            Microsoft.Office.Interop.Excel._Application xlsApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbooks books = xlsApp.Workbooks;
    
            books.Open(path);
            Microsoft.Office.Interop.Excel.Sheets sheets = xlsApp.Worksheets;
            
            //注意:sheet和row,column的起始索引都是1
            for (int s = 1; s <= sheets.Count; s++)
            {
                Console.WriteLine(path + "\t" + s);    //打印搜索进度
                int rows = sheets[s].Rows.Count;
                int columns = sheets[s].Columns.Count;
    
                for(int i=1;i<=rows;i++)
                {
                    for(int j=1;j<=columns;j++)
                    {
                        //下面这一行获取了一个单元格
                        Microsoft.Office.Interop.Excel.Range cell = sheets[s].Range[xlsApp.Cells[i, j], xlsApp.Cells[i, j]];
                        if(cell.Text == target)
                        {
                            //将满足条件的单元格路径、sheet序列、位置、内容记录进入一个txt文件,这个函数需要自己实现
                            RecordIntoTXT(path, s, cell.Address, target);
                        }
                    }    
                }
            }
        }
        catch (Exception e)
        {
            //sw1为一个log文件的文件流,将出现异常的文件路径记录到文件中
            //这个位置也可以使用throw抛出异常
            sw1.WriteLine(path);
        }
    }

    这种方法网上也能找到很多类似的代码,比如:

    https://blog.csdn.net/qq_33459369/article/details/79314465中的代码。这个博客中的代码使用单线程读取Excel文件的时候使用了range.Select方法,这个方法相当于是在Excel表格中选中了一个范围内的格子(在这个代码语境下是选中了一个(i,j)位置的格子),然后再使用ActiveCell字段获取被选中的格子,再进行后续操作,比较麻烦,也没有必要。

    到现在为止,已经完成了这个问题的核心,也就是读取Excel文件。但是这种方法有很大的不足。首先是效率问题,这种使用代码遍历单元格的执行效率极低,甚至到了一个不能接受的程度。另外,上面的示例代码只是判断了一下字符串相同,如果要进行字符串匹配的话(即判断target字符串是否被包含在表格的字符串中,最经典的字符串匹配算法是KMP算法,有兴趣的可以了解一下。当然,使用string内置的方法也可以)就又会多一些工作量。所以还有很大的提升空间,在一番尝试下,终于有了一个比较优美的解答。


    (三)最终解

    之前在描述COM组件的时候提了一句,使用COM组件可以调用Excel自身的宏方法。在Excel中寻找指定的内容最直接的办法当然是调用Excel本身的Find方法(相当于在Excel中使用Ctrl+F快捷键)。这样一来,可以避免之前代码中对行列进行的二重循环,也解决了字符串匹配的问题。唯一需要注意的地方在于使用Find+FindNext方法联合进行查找的时候需要定位初始位置,否则会进行无限循环,这也算是FindNext方法的特性吧。示例代码如下:

    static void ReadExcel(string path, string target)
    {
        Console.WriteLine(path);
        try
        {
            Microsoft.Office.Interop.Excel._Application xlsApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbooks books = xlsApp.Workbooks;
            books.Open(path);
            Microsoft.Office.Interop.Excel.Sheets sheets = xlsApp.Worksheets;
    
            for (int s = 1; s <= sheets.Count; s++)
            {
                Console.WriteLine(path + "\t" + s);
                Microsoft.Office.Interop.Excel.Range range = sheets[s].Cells;
                Microsoft.Office.Interop.Excel.Range ans = range.Find(target);
                if (ans == null) continue;
                string firstAddress = ans.Address;    //定位初始位置
                do
                {
                    string text = ans.Text;
                    RecordIntoTXT(path, s, ans.Address, text);
                    ans = range.FindNext(ans.Cells[1, 1]);    //意思是从当前查找位置开始寻找下一个
                } while (ans != null && ans.Address != firstAddress);    //如果到达初始位置表示当前sheet查找结束
            }
        }
        catch (Exception e)
        {
            sw1.WriteLine(path);
        }
    }

    在使用COM组件进行读取Excel文件的时候,一定要注意最终程序的出口。如果在执行完上面的函数没有进行任何结束处理就退出程序的话,Excel程序其实还是在后台运行的,双击之前的Excel文件会提示正在被修改只能以只读模式打开。因此需要增加一个退出程序的函数。网上的资料中这个函数的实现方法都大致相同,如下给出示例:

    static void QuitExcel()
    {
        if (xlsApp != null)    //xlsApp为上面那个示例函数中的变量,当作全局变量声明了
            xlsApp.Quit();
        System.Diagnostics.Process[] pros = System.Diagnostics.Process.GetProcessesByName("excel");
        foreach (System.Diagnostics.Process pro in pros)
        {
            pro.Kill();    //杀死了所有excel进程
        }
        GC.Collect();    //进行垃圾回收,其实我并不知道为什么在这里要强制调用垃圾回收,只是网上这样写了,我就照做了
    }

    (四)除了读取Excel文件之外的其他功能实现

    到现在位置,整个代码的核心部分就已经完成了。我们还需要完成一些核心的支持工作。

    (1)文件夹下所有文件的遍历

    这一部分纯属文件目录相关的操作,需要引入System.IO命名空间。基本思想是获取一个给定的根目录,将所有excel文件加入一个list中,再获取这个根目录下的所有子文件夹,使用相同的方法遍历所有的子文件夹,将里面的所有excel文件同样加载到同一个list中,示例代码如下:

    static void GetFiles(string path)
    {
        DirectoryInfo root = new DirectoryInfo(path);
    
        FileInfo[] files = root.GetFiles();        //获取根目录的excel文件
        string fileName;
        foreach (FileInfo f in files)
        {
            fileName = f.Name.ToLower();
            if (fileName.EndsWith(".xls") || fileName.EndsWith(".xlsx"))
            {
                allFiles.Add(f);    //allFiles是一个全局的List<FileInfo>
            }
        }
    
        //下面这几行遍历子节点
        DirectoryInfo[] directories = root.GetDirectories();
        foreach (DirectoryInfo d in directories)
            GetFiles(d.FullName);
    }

    (2)查找结果的记录

    查找结果记录的方法可以自选,这里使用了存储在桌面下的txt文件中,开启结束文件流的示例代码如下:

    //fs,sw,fs1,sw1为四个全局变量
    static void StartFileStream()
    {
        string desktopPath = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);    //这一行获取桌面路径
    
        fs = new FileStream(desktopPath + "\\record.txt", FileMode.Create, FileAccess.Write);
        sw = new StreamWriter(fs);
        fs1 = new FileStream(desktopPath + "\\log.txt", FileMode.Create, FileAccess.Write);
        sw1 = new StreamWriter(fs1);
    }
    
    static void EndFileStream()
    {
        sw.Flush();    //清空缓存
        sw.Close();    //关闭writer
        fs.Close();    //关闭文件流
        sw1.Flush();
        sw1.Close();
        fs1.Close();
    }

    到此位置,整个问题的功能基本实现。整体代码有机会的话,会上传到GitHub,到那时候再来这里附上链接。

    注意:使用COM组件打开Excel文件的时候会出现一些问题。当你文件本身存在问题,即直接双击打开一个Excel文件在表头出现如下提示的时候,使用COM组件打开会失败,这时候当时的try-catch语句的功能就体现出来了,会将这个文件的路径记录到log中,便于后续人工操作。另外,有的Excel文件在打开的时候会弹出一个Warining对话框,让用户选择一些操作,这个时候使用COM组件进行读取的时候也弹出对话框让用户进行选择。还有一点需要注意,使用这种方法读取Excel文件之后,所有被读取过的xlsx没有问题,而被读取过的xls文件会在SVN中提示文件有修改,猜测可能是新版的Excel读取xls文件会就修改原有文件中的游标位置之类的辅助信息,文档本体内容并没有变化。

    (←示例图片如左)

    展开全文
  • 确定目标: 我们想要的效果如下 ...“只”对筛选的内容进行计算 COUNTA 有内容的单元格进行总和 选择区域:我们固定数据区域的起始点,让数据区域的终点能移动,即 $C$2(起始点):C2(终点) ...

    确定目标:
    我们想要的效果如下
    在这里插入图片描述

    请看整个过程的操作:
    在这里插入图片描述
    分析:

    函数 功能
    SUBSTOTAL “只”对筛选的内容进行计算
    COUNTA 对有内容的单元格进行总和

    选择区域:我们固定数据区域的起始点,让数据区域的终点能移动,即 $C$2(起始点):C2(终点)

    展开全文
  • Excel 筛选查找

    2016-12-06 19:06:20
    1.开启Excel筛选。 很简单,只要点“开始”------&gt;"排序和筛选"--------&gt;"筛选",筛选按钮就出来咯。其实我之前一直都不懂。。   初始效果,没有“筛选按钮”   开启...

    今天被安排整理一些资料。学习到一下内容:

    1.开启Excel筛选。

    很简单,只要点“开始”------>"排序和筛选"-------->"筛选",筛选按钮就出来咯。其实我之前一直都不懂。。

     

    初始效果,没有“筛选按钮”

     

    开启筛选:


     
    开启后


     然后就可以筛选你需要的内容咯。

     

    2.EXCEL多表查询。

    举个栗子:我需要查询A表中的“张三”是否存在在B表中。那么我需要使用vlookup()函数(在我本次整理工作中大量用到了这个函数,主要是核实A表中的名字是否存在在B表中,所以就能知道有谁没有交东西咯)。

    说明下这个函数:

    该函数的语法规则如下:
    VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)

     

    参数
    简单说明
    输入数据类型
    lookup_value
    要查找的值
    数值、引用或文本字符串
    table_array
    要查找的区域
    数据表区域
    col_index_num
    返回数据在查找区域的第几列数
    正整数
    range_lookup
    模糊匹配/精确匹配
    TRUE(或不填)/FALSE

     

     

    下面开始使用:

    1. (此时是A表)先在右键----》“插入”--------》“插入整列”。(为什么呢?因为需要多出一列来存放查询结果,然后可以直观的看到那个名字有查到的。)


     

    2. (此时是A表)输入函数:vlookup(   可以看到,提示你需要填完整的参数了。



     
     (此时是A表)填写第一个参数:需要查找的值。我们就把整个A列都填入。所以只需要点一下A列就okay!!然后就自动帮你把整个A列都填入了。


     

     (此时是B表)继续,第二个参数:需要查找的范围。就是你要从哪里来查找第一个参数。

    我们需要加一个英文的逗号: ,  。记住是英文。然后再切换到另外一个Excel文件。再点击你需要查找的列。我们需要查找的继续是“姓名”,一列,所以需要点击另外一个Excel文件的C列。整个C列。可以看到第二个函数补充完毕。而且是已另外一个Excel表名开头的。


     

    下面,继续完善第三个参数。返回数据在查找区域的第几列数。这个要注意:是你查找区的第几列,这里只选择了一列,所以写“1”。基数是从1开始的。当然了,写“1”之前还要追加一个英文的逗号。


     

    下面还差最后一个参数咯。这个煎蛋,因为可以填写的只有:true和false。分别代表着:true:模糊匹配  false:精确匹配



     

     函数完成!!放心的回车吧!!。然后结果就出来咯。

    wait!!这是不够的,这个只是一个结果,你需要的是整列的查找。所以,需要把鼠标放在写有函数的那个单元格的右下角-------->双击!!然后整列就有结果啦。


     

    从结果中可以看到,在A表中的名字如果在B表中查询到结果的话,那么就会返回。

     

    结束。。。。写个blog真累。。。
     

     

    展开全文
  • excel高级筛选 Excel 2007高级筛选器速度缓慢 (Excel 2007 Advanced Filter Painfully Slow)It was like riding a lazy snail through molasses in January -- but slower! Usually an Excel Advanced Filter is a ...

    excel高级筛选

    It was like riding a lazy snail through molasses in January -- but slower! Usually an Excel Advanced Filter is a speedy way to extract data from a table, but things weren't working right in a sample file that I got last week.

    就像在一月份在糖蜜中骑着懒惰的蜗牛一样-但速度要慢一些! 通常,Excel 高级筛选器是一种从表中提取数据的快速方法,但是在上周获得的示例文件中,一切都无法正常进行。

    And despite what my high school English teachers might think, you can't mix too many similes, when trying to describe excruciating slowness.

    而且,尽管我的高中英语老师可能会想,但在描述难以忍受的缓慢性时,您不能混合太多的比喻。

    The sample file had code that ran an Advanced Filter in Excel 2007. The code ran quickly in Excel 2003, but screeched to a near halt in Excel 2007. What was the problem?

    该示例文件中的代码在Excel 2007中运行了高级筛选器。该代码在Excel 2003中快速运行,但是在Excel 2007中几乎停顿了。问题是什么?

    病征 (The Symptoms)

    When the code ran in Excel 2007, it looked like the extracted rows were being pasted in the second worksheet, one row at a time. Aha! Turn off the screen updating -- a simple solution. You'd think.

    当代码在Excel 2007中运行时,看起来提取的行被粘贴到第二个工作表中,一次粘贴一行。 啊哈! 关闭屏幕更新-一个简单的解决方案。 你会想。

    Even with the screen updating turned off, the code barely crawled along. It took almost 3 minutes to extract 1500 rows -- maybe a millisecond faster than it ran with screen updating turned on. Who has that kind of time?

    即使关闭了屏幕更新,该代码也几乎没有爬行。 提取1500行花了将近3分钟的时间-可能比打开屏幕更新的速度快一毫秒。 谁有这样的时间?

    继续猜 (Guess Again)

    In the next round of solution guessing, I got rid of the few formulas in the worksheet and criteria range. There wasn't anything too complex, but maybe that was slowing things down.

    在下一轮解决方案猜测中,我摆脱了工作表和条件范围中的一些公式。 没有什么太复杂的,但是也许这会使事情变慢。

    I also changed calculation to manual at the start of the code, then set it to automatic at the end of the code.

    我还在代码开头将计算方式更改为手动,然后在代码结尾将其设置为自动。

    Neither of those changes had any effect on the code's speed.

    这些更改均不会影响代码的速度。

    清除数据 (Strip the Data Clean)

    In round 12 of testing (I've lost track of the test count), I copied the data, and pasted it as values into a new workbook. The code ran like lightning. In July. With jet engines. Hmmm.

    在第12轮测试中(我失去了对测试计数的了解),我复制了数据,并将其作为值粘贴到新的工作簿中。 代码像闪电一样运行。 在七月。 使用喷气发动机。 嗯

    Maybe it was the formatting and styles in the original file that were slowing things down. To test that theory, I formatted the original table with Normal style, which removed all the borders and fill colour.

    也许是原始文件中的格式和样式使事情变慢了。 为了验证该理论,我使用Normal样式格式化了原始表格,该表格删除了所有边框并填充了颜色。

    That didn't improve things, but when I removed the red fill from the heading cells, I noticed a red comment marker in one of the cells.

    这样做并没有改善,但是当我从标题单元格中删除红色填充时,我注意到其中一个单元格中有一个红色注释标记。

    鞭打成形状 (Whip Things Into Shape)

    Could a comment be the problem? It didn't seem likely, but as soon as I deleted the comment, the code ran perfectly. Put the comment back, and it slowed to a crawl again.

    可能是评论吗? 似乎不太可能,但是当我删除注释后,代码就完美地运行了。 将评论放回去,它又变慢了爬行的速度。

    AdvancedFilterSlow01

    好奇与好奇 (Curiouser and Curiouser)

    When I tried to create a sample file to demonstrate this problem, things got even stranger. I created a table with a comment in the heading, and ran the code, expecting it to be slow. It ran quickly, in several tests.

    当我尝试创建示例文件来演示此问题时,事情变得更加陌生。 我创建了一个在标题中带有注释的表,并运行了代码,期望它很慢。 在多个测试中,它运行很快。

    AdvancedFilterSlow02

    Then I added a shape to the worksheet, and assigned a macro, to make it easier to run the code. The code slowed down again.

    然后,我在工作表中添加了一个形状,并分配了一个宏,以使其更易于运行代码。 代码再次变慢。

    AdvancedFilterSlow03

    I deleted the shape, and the code was still slow, and I had to delete the comment to speed it up again.

    我删除了形状,但是代码仍然很慢,我不得不删除注释以再次加快速度。

    判决 (The Verdict)

    If your Advanced Filters are running slowly in Excel 2007, try removing any comments in the table heading cells. You could delete them at the start of a VBA procedure, run the filter, then add the comments at the end of the code.

    如果您的“高级筛选器”在Excel 2007中运行缓慢,请尝试删除表标题单元格中的所有注释。 您可以在VBA过程开始时将其删除,运行过滤器,然后在代码末尾添加注释。

    The problem seems to occur if there are heading comments, and a shape is added later, as you can see in the short video demonstration below.

    如果有标题注释,似乎会出现问题,并且稍后添加了形状,如下面的简短视频演示所示。

    Fortunately, this problem appears to be fixed in Excel 2010, so if you upgrade, you should be able to have comments and shapes, without slowing down the Advanced Filters.

    幸运的是,此问题在Excel 2010中似乎已得到解决,因此,如果进行升级,则应该能够具有注释和形状,而不会降低“高级筛选器”的速度。

    Update: In the comments, PDLobster suggests the following solution, to speed up the filters -- thanks!

    更新 :在评论中,PDLobster建议以下解决方案,以加快筛选器的速度-谢谢!

    1. Turn off all filters

      关闭所有过滤器
    2. Select cell A1

      选择单元格A1
    3. Turn Wrap Text ON

      开启自动换行
    4. Select the entire worksheet

      选择整个工作表
    5. Turn Wrap Text OFF

      关闭自动换行

    观看视频 (Watch the Video)

    To see the steps for reproducing and solving the Advanced Filter speed problem, you can watch this short Excel video.

    要查看再现和解决“高级筛选器”速度问题的步骤,可以观看这段简短的Excel视频。

    演示地址

    翻译自: https://contexturesblog.com/archives/2010/11/29/excel-2007-advanced-filter-painfully-slow/

    excel高级筛选

    展开全文
  • 其实强大的Excel早就为你准备了N多贴心的高级筛选功能,只是90%的人都不知道~今天我带来的这10个筛选技巧都以动画演示展示整个操作过程,就是为了帮你学到这些在网上很难找到的经典实用的Excel技术!如果你怕记不住...
  • Excel中的筛选 subtotal

    千次阅读 2013-01-16 15:49:55
    Excel中的筛选,是一个很常用的功能。...而由于筛选的主要功能之一就是可以方便快捷的进行变换,所普通的以直接在数据最下面一行进行求和无法实现,计算值也是不准确的。 1:输入一个简单的图表,共10项三个分
  • 2017年职称计算机考试EXCEL操作题一、操作题1、在考生文件夹下新建一个Excel工作簿,完成以下操作:(1)将Sheet1工作重命名为debug1。(2)在debug1工作中,试采用数据的填充功能分别填充A1:M1区域和A2:M2区域,前...
  • 在上一讲课程中,我们高级筛选功能进行了系统了解和基本应用。我们都知道了,高级筛选可以轻松解决:可以轻松解决多条件的筛选问题可以把结果复制到其他区域或表格中可以完成多列联动筛选,比如筛选B列大于A列的...
  • :那么是不是还有其它筛选方式呢?那必须有,这也是 SQL 的强大之处,常规 VBA 语句需要写很多代码实现的功能, SQL 一句可能就搞定了 本文为原创作品,如需转载,可加小编微信号 learningBin 以上为本次的...
  • 今天我们来讲一下Excel筛选功能,筛选功能可以在一大堆的数据中,按照某个条件筛选出来我们想要的数据;比如一整个年级的考试成绩,筛选出来某个班的。 1如何开启筛选 选中区域内的任一单元格;使用快捷键Ctrl ...
  • 最近我们其实陆陆续续有使用到高级筛选这个强大好用的功能,很多老铁希望小编可以系统讲讲,于是小编就花了点时间整理了一下,准备系统讲讲,建议收藏,这应该是你所能看到最全最系统的高级筛选教程。为了系统讲讲,...
  • 效果是这样: 方法: 在B列第2排,输入=if(HOUR(A2)...然后就是复制,粘贴整个列就OK了。不想复制也可以按住的右下角那个点,一直拖下去,一样效果。 转载于:https://www.cnblogs.com/laokchen/p/5752233.html...
  • 今天晚上花费了一晚上的时间,来研究Excel筛选功能。呵呵,如果你使用的2010版的Excel的话,其实这个功能也不需要研究的,很简单的。但是高级筛选就有点难度的,不过我们可以“筛选”功能分步来实现。 我们先来讲一...
  • 在工作中遇到一张统计有多个字段,每个字段都有其筛选条件,写工作汇报需要每个字段的占比来进行分析数据背后的意义。如果按照原来的一次次点击每个字段的筛选条件查询将会耗费大量时间,运用数据透视能够节约三...
  • 看了一下我的数据库几个,发现EXCEL导入时多了一些NULL的Column,这些字段数量(即列的数量)不一样多,导致UNION无法拼接查询结果,所以删了多余的NULL列, 【切记】 一定要保存后才能查询成功 Navicat并不是修改...
  • excel 如何 筛选,以及筛选后,在复制时 显示 不可多重选定区域使用此命令的解决办法选中 第一行, 开始 筛选 选择 某一列 右下角的小三角 ,进行内容筛选 即可。 excel 筛选后,在复制时 显示 不可多重选定...
  • excel不能自动筛选原因

    千次阅读 2013-04-25 08:30:30
    原因一:  通常情况下,只要数据源是连续的,中间没有空行空列都不会出现excel不能... 解决方法:先取消自动筛选,然后选中整个数据区域,再重新设置自动筛选。  不规范的数据源的筛选和排序是先进行选定单元格区
  • 高级筛选是针对复杂条件的筛选。例如:在图7-9所示的员工薪水表中,只显示薪水超过6000元(含6000元)的销售部的员工和薪水低于4000元的培训部的员工的记录。操作步骤:1)在数据清单以外的区域输入筛选条件。该条件区域...
  • 自动筛选是针对简单条件进行筛选。例如:在员工薪水表中,只显示薪水超过6000元(含6000元)的员工记录。操作步骤:(1)单击数据清单内的任何一个单元格。(2)选取“数据”菜单中的“筛选”命令下的子命令“自动筛选”...
  • range().autofilter filed:=N,criteria 1:=***, operator:=xland,criteria2:=*** ...若想在第N列筛选基础上再加入M列的筛选,直接再写一行M列筛选 range().autofilter filed:=M,criteria:=*** ...
  • 数据透视 筛选 筛选出的列表可见行的数据透视 (Pivot Table from Filtered List Visible Rows) When you create a pivot table in Excel, it doesn't matter if there are filters applied in the source data ...
  • 高级筛选是针对复杂条件的筛选。例如:在员工薪水表中,只显示薪水超过6000元(含6000元)的销售部的员工和薪水低于4000元的培训部的员工的记录。操作步骤:1)在数据清单以外的区域输入筛选条件。该条件区域至少为两行...
  • 如何根据一定的条件,从其他Excel表中有选择地导入数据到一个新的数据中? 例如,筛选出species为 I.setosa的部分数据 #step1 依次点击【数据】-- 【自其他源】–【来自Microsoft Query】 弹出 【选择数据源】...
  • excel 教程:B站学习地址 前五节是用txt记的,6-10节有图片说明。 第一节 shift + table 光标左移 每列表头 鼠标放置出现“竖线”,双击,达到“自动调整列宽效果” 设置每列宽度一样: 选中所有列,找到其中任意个...
  • # 对整个df进行替换 # df2_2.replace([r'(', r')', r' '], # ['(', ')', ''], # regex=True, inplace=True) # 预处理之 —— 设计不同字段的值替换 & 生成新字段 mask1 = df2_2 [ 'col_1' ] ...
  • 模仿 Excel表格 文字筛选组件 应用场景:表格上方添加按钮,点击后有弹出框,里面有很多复选框供用户选择,用户勾选对应的复选框就会筛选出包含对应文字的行 效果展示: 我这里先实现了年份的筛选,如果需要其他的...
  • 今天第一次尝试使用Excel宏。 要实现的功能是:1个xls文件中,有2个工作。判断工作是否筛选,如果筛选清除筛选。然后将一个工作中的数据,粘贴到另一个工作下方。 尝试了录制宏,然后个修改其中的代码。...
  • 可点击字段右侧的下拉箭头来筛选 第6步:查看去重后的数量统计情况,可以使用PQ编辑器中“转换”下的“统计信息”中的“非重复值进行计数” 第7步:查看不同数据值的统计情况,点击字段右侧箭头,选择“分组依据”...
  • 使用筛选功能可以实现信息的分类汇总,以及帮助您实现信息的快速分析和决策。首先点击[排序和筛选]按钮。 2. 选择列表中的[筛选]选项,自动进入数据筛选模式。 3. 在数据列的标题文字右侧,多了一个下拉箭头,点击...
  • Sub 取消全部工作簿的筛选() On Error Resume Next Dim wb As Workbook Dim ws As Worksheet For Each wb In Application.Workbooks For Each ws In wb.Worksheets ws.UsedRange.AutoFilter Next Next ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,343
精华内容 3,337
关键字:

对整个excel表进行筛选