列宽或行高的多线程化调整的制作方法

文档序号:6360378阅读:104来源:国知局
专利名称:列宽或行高的多线程化调整的制作方法
列宽或行高的多线程化调整背景电子数据表应用使用户能够查看和操纵表格数据。例如,电子数据表应用可使得用户能够查看和操纵包含若干仓库处的若干产品的存货清单的表格。当查看电子数据表表格时,某些用户喜欢在电子数据表表格的单元格中看到完整的值。然而,如果电子数据表表格中的列的宽度太窄,则该列中的一个或多个单元格中的值可能在视觉上被截断。例如,某一给定列中的某一单元格可包含20个字符的产品名称,但是该给定列仅宽达16个字符。结果,在该示例中,当在该单元格的下一单元格中存在值时,用户将不能看到该数字的四个数位。为了确保用户能够看到电子数据表表格的单元格中的完整值,电子数据表应用可执行在电子数据表数据中自动调整列的宽度的过程。该过程可能要求做出关于每个单元格中的文本的宽度的判断。当电子数据表表格中的单元格的数量大时,调整电子数据表表格 中的列的宽度的过程可能相对慢。这类延迟可能打断用户的思路或阻碍用户发起调整电子数据表表格中的列的宽度的过程。因此,希望使得调整电子数据表表格中的列的宽度的过程尽可能地快。概述计算系统执行列调整过程。列调整过程使用多个线程来确定电子数据表表格中的列的总体最大列宽。对于每一列,该列的总体最大列宽基于该列中任何单元格中的任何值的最宽文本表示的宽度。计算系统然后回流(reflow)该电子数据表表格,使得各列具有基于各列的总体最大列宽的宽度。类似地,计算系统执行行调整过程。行调整过程使用多个线程来确定电子数据表表格中的行的总体最大行高。某一行的总体最大行高基于该行中任何单元格中的任何值的最高文本表示的高度。计算系统然后回流(reflow)该电子数据表表格,使得各行具有基于各行的总体最大行闻的闻度。提供本概述以介绍一些概念。这些概念在以下详细描述中进一步描述。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。附图
简述图I是示出示例计算系统的框图。图2是计算系统的示例替代实施例的框图。图3是示出电子数据表应用调整列宽的示例操作的流程图。图4是示出宽度求值线程的示例操作的流程图。图5是示出示例计算设备的框图。详细描述图I是示出示例计算系统100的框图。计算系统100是包括一个或多个计算设备的系统。如本文所使用的,计算设备是处理信息的物理、有形设备。在各实施例中,计算系统100包括各种类型的计算设备。例如,计算系统100可包括一个或多个台式计算机、膝上型计算机、上网本计算机、手持式计算设备、智能电话、独立服务器设备、刀片服务器设备、大型计算机、超级计算机和/或其他类型的计算设备。在计算系统100包括不止一个计算设备的实施例中,计算系统100中的计算设备可以分布在各个位置并经由诸如因特网或局域网等通信网络来进行通信。如图I的示例所示,计算系统100包括数据存储系统102、处理系统104和显示系统106。应当理解,在其他实施例中,计算系统100包括比图I的示例所示更多或更少的组件。此外,应当理解,图I以简化形式示出了计算系统100以便于理解。数据存储系统102是包括一个或多个计算机可读数据存储介质的系统。计算机可读数据存储介质是能够以易失性或非易失性方式存储数据的物理设备或制品。在一些实施例中,数据存储系统102包括一个或多个非瞬时计算机可读数据存储介质。示例类型的计算机可读数据存储介质包括随机存取存储器(RAM)、只读存储器(ROM)、光盘(例如,⑶-ROM、DVD、蓝光盘、HDDVD盘等)、磁盘(例如,硬盘驱动器、软盘等)、固态存储器设备(例如,闪存驱动器)、EEPR0M、现场可编程门阵列(FPGA)、以及其它类型的非瞬时设备和制品。 在数据存储系统102包括不止一个计算机可读数据存储介质的一些实施例中,计算机可读数据存储介质分布在各个地理位置。数据存储系统102存储表示电子数据表应用108的计算机可读指令。在某些实施例中,计算机可读指令表示某一版本的微软⑧EXCEL 电子数据表应用或另一电子数据表应用。在数据存储系统102包括不止一个计算机可读数据存储介质的一些实施例中,表示电子数据表应用108的计算机可读指令分布在这些计算机可读数据存储介质中的两个或更多个上。在数据存储系统102包括不止一个计算机可读数据存储介质的其他实施例中,表示电子数据表应用108的计算机可读指令只被存储在这些计算机可读数据存储介质中的一个上。处理系统104是包括多个处理单元IlOA到IlON (统称为“处理单元110”)的系统。在各实施例中,处理系统104包括各种数量的处理单元。例如,处理系统104可包括两个、四个、八个、十六个、三十二个、六十四个或其他数量的处理单元。每一个处理单元110都是物理集成电路。每一个处理单元110能够与其他处理单元110异步地执行计算机可读指令。结果,处理单元110能够彼此并行地独立并行执行计算机可读指令。显示系统106是处理系统104用来向用户显示信息的系统。在各实施例中,显示系统106以各种方式向用户显示信息。例如,在一些实施例中,显示系统106包括图形界面和监视器。处理系统104中的处理单元110执行表示电子数据表应用108的计算机可读指令。表示电子数据表应用108的计算机可读指令在被处理单元110执行时使得计算系统100提供电子数据表应用108。电子数据表应用108使用户能够查看和操纵电子数据表表格。电子数据表表格是被组织成一个或多个行和一个或多个列的表格数据集。例如,电子数据表表格可以是电子数据表中一完整的表格、表格的一部分、数据透视表、或另一种类型的电子数据表表格。电子数据表表格可包含各种类型的数据。例如,电子数据表表格可包含销售数据、库存数据、军事数据、记账数据、统计数据、人口数据、人口统计数据、财务数据、医疗数据、体育数据、科学数据或可被呈现在表格中的任何其他类型的数据。电子数据表表格中的每个单元格可具有值。单元格中的值可具有各种数据类型。例如,某一列或某一行中的所有单元格可以是整数、实数、浮点数、字母数字文本串、日期、货币金额、布尔值等。当用户正在使用电子数据表应用108工作时,电子数据表应用108使用显示系统106致使一图形用户界面向电子数据表应用108的用户显示电子数据表表格。响应于一个或多个不同类型的事件,电子数据表应用108执行列调整过程来为电子数据表表格中的一组目标列中的每一列确定总体最大列宽。列调整过程使用多个宽度求值线程来为一些电子数据表表格中的列确定总体最大列宽。列调整过程使用单个宽度求值线程来为其他电子数据表表格中的列确定总体最大列宽。某一列的总体最大列宽是该列中任何单元格中任何值的最宽文本表示的宽度。电子数据表108回流电子数据表表格,使得该组目标列中的每一列具有基于该列的总体最大列宽的宽度。当电子数据表应用108回流电子数据表表格时,电子数据表应用108致使显示系统106显示经回流的电子数据表表格。目标列是电子数据表表格中电子数据表应用108对其执行列调整过程的列。该组 目标列包括电子数据表表格中的至少一列。也就是说,该组目标列可包括电子数据表表格中的单个列或可包括电子数据表表格中的多个列。此外,在某些实例中,该组目标列可包括电子数据表表格中的全部列。此外,在某些实施例中,电子数据表应用108的用户可选择该组目标列中的列。换言之,电子数据表应用108接收来自用户的一个或多个列选择输入。列选择输入指示目标列。例如,电子数据表表格包括列“A”至“F”。在该示例中,用户向电子数据表应用108提供一个或多个列选择输入,指示出应该对列“A”、“C”、和“D”执行列调整过程。在某些实施例中,该组目标列不包括宽度被用户人工设置的列。在各种实施例中,某一列的宽度可以以各种方式基于该列的总体最大列宽。例如,在某些实施例中,某一列的宽度等于该列的总体最大列宽。在其他实施例中,某一列的宽度等于该列的总体最大列宽加上一缓冲区的宽度。该缓冲区包括位于单元格中的值的任一端的空间,该空间提供相邻列的单元格中的值之间的视觉分隔。该缓冲区可包括在列标题中呈现控件元素所需的空间。这些控件元素包括例如自动筛选下拉按钮。缓冲区的宽度通常是小的(如在任一端小于5个像素)。下面的示例示出列调整过程的影响。在该示例中,电子数据表表格中的某一列包括三个单元格。在该示例中,第一单元格包含54像素宽的文本,第二单元格包含63像素宽的文本,而第三单元格包含34像素宽的文本。在该示例中,该列最初是50像素宽。列调整过程调整该列的宽度,使得该列的宽度为63像素宽加上缓冲区宽度。因此,作为执行列宽度调整过程的结果,用户可在第二单元格中看到完整值。前一段落中的示例描述了仅包括具有三个单元格的单个列的非常简单的电子数据表表格。在许多情况下,真实的电子数据表表格可包括数千行、数千列、以及数百万个单元格。结果,顺序地对每个单元格中的文本的宽度求值可能是时间和资源密集的。通过使用多宽度请求线程,对大电子数据表表格执行列调整过程所需的时间可与宽度求值线程的数量成比例地降低。尽管本文档的大部分讨论了调整列宽度以及对单元格中的文本的宽度求值,但是行调整过程可以与所述的列调整过程类似的方式来操作。当用对行的讨论来替代对列的讨论以及用对高度的讨论替代对宽度的讨论时,本文档中的描述适用于行调整过程。电子数据表应用108使用行调整过程来回流电子数据表表格,使得电子数据表表格中的每一行具有基于该行的总体最大行高的高度。行调整过程使用多个高度求值线程来确定电子数据表表格中的每一行的总体最大行高。某一行的总体最大行高是该行中的任何单元格中的最高文本的高度。图2是计算系统100的示例替代实施例的框图。如图2的示例所示,计算系统100包括数据存储系统1 02和处理系统104,如同图I所示的示例实施例。然而,不同于图I所示的示例实施例,图2所示的计算系统100的示例替代实施例具有网络接口 200而不是显示系统106。网络接口 200使得计算系统100能够经由网络204向客户机设备202发送数据以及从客户机设备202接收数据。网络204是包括计算设备和方便在计算系统100与客户机设备202之间进行通信的链接的通信网络。在各实施例中,网络204包括各种类型的计算设备。例如,网络204可包括路由器、交换机、移动接入点、网桥、集线器、侵入检测设备、存储设备、独立服务器设备、刀片服务器设备、传感器、台式计算机、防火墙设备、膝上型计算机、手持式计算机、移动电话和其他类型的计算设备。在各实施例中,网络204包括各种类型的链接。例如,网络204可包括有线和/或无线链接。此外,在各实施例中,网络204按各种规模实现。例如,网络204可被实现为一个或多个局域网(LAN)、城域网、子网、广域网(诸如因特网)或可以按另一规模来实现。客户机设备202是计算设备。例如,客户机设备202可以是用户使用的个人计算机。用户使用客户机设备202来经由网络204向计算系统100发送请求以及从计算系统100接收数据。以此方式,用户可使用客户机设备202来采用电子数据表应用108来查看和操纵表格数据。例如,计算系统100可经由网络204向客户机设备202发送数据。在该示例中,客户机设备202被配置成处理从电子数据表应用108接收的数据以便呈现给客户机设备202的用户。例如,客户机设备202可呈现包含电子数据表表格的网页或与客户机应用交互以显示电子数据表表格。图3是示出电子数据表应用108调整列宽的示例操作300的流程图。电子数据表应用108可响应于各种事件来开始操作300。例如,在某些实施例中,电子数据表表格中的数据是从一个或多个外部数据源中的数据得出的。外部数据源可以是关系型数据库、其他电子数据表表格、日志文件、XML文件、目录、和/或其他类型的数据源。在该示例中,电子数据表应用108在电子数据表表格的单元格中的值根据一个或多个外部数据源被刷新时开始操作300。在另一示例中,电子数据表表格是数据透视表。数据透视表中的数据是从一个或多个其他电子数据表表格中得出的。在该示例中,电子数据表应用108在数据透视表中的单元格中的值根据该一个或多个其他电子数据表表格被刷新时开始操作300。在又一示例中,电子数据表应用108在电子数据表应用108的用户将一个或多个值输入到电子数据表表格的单兀格中时开始操作300。在又一不例中,电子数据表应用108响应于从电子数据表应用108的用户接收到执行列调整过程的指令而开始操作300。在又一示例中,电子数据表应用108在电子数据表应用108的用户对电子数据表表格中的数据重新格式化时开始操作300。在开始之后,电子数据表应用108确定一组目标列中的单元格的总数是否超出下限(302)。该组目标列包括电子数据表表格中的列中的至少一列。在各种实施例中,该组目标列是以各种方式被确定的。例如,在某些实施例中,电子数据表应用108从用户接收类选择输入。列选择输入指示目标列。在另一示例中,电子数据表应用108自动地将电子数据表表格中的全部列用作该组目标列。在又一不例中,当电子数据表表格中的单兀格的值根据外部数据源被刷新时,该组目标列包括包含具有经刷新的值的单元格的列。在各种实施例中,电子数据表应用108使用各种下限。例如,在一些实施例中,下限是2056个单元格。在其他实施例中,其他下限被使用(如1028个单元格、4112个单元格
-rf* ) O如果目标列中的单元格的总数不超过下限(302的“否”),则电子数据表应用108使用单个宽度求值线程来为该组目标列中的每一列标识总体最大列宽(304)。该单个宽度求值线程通过计算目标列中每个单元格中文本的宽度来对该组目标列中的每一标识总体最大列宽。在某些实施例中,该单个宽度求值线程是执行操作300的电子数据表应用108的线程。在其他实施例中,该单个宽度求值线程是不同于执行操作300的电子数据表应用108的线程的线程。如果该组目标利中的单元格的总数超过下限(302的“是”),则电子数据表应用108将电子数据表表格的行分成多个工作单元(306)。在各种实施例中,工作单元包括各种数量的行。在某些实施例中,除了可能地一剩余工作单元之外,每个工作单元包含相同数量的行。例如,除了该剩余工作单元之外,所有工作单元可包含256行。在这些实施例中,该剩余工作单元可包含少于256行。例如,如果电子数据表表格包括1100行,则有4个工作单元包含256行,而一剩余工作单元包含76行。在其他实施例中,工作单元可包含比256多或少的数量的行。例如,在某些实施例中,每个工作单元包含512行。此外,在一些实施例中,电子数据表应用108呈现允许管理用户设置工作单元中的行数的一用户界面。此外,电子数据表应用108确定宽度求值线程的适当数量(308)。在各种实施例中,电子数据表应用108以各种方式确定宽度求值线程的适当数量。例如,在某些实施例中,电子数据表应用108基于工作单元的数量以及基于处理系统104的处理单元的数量来确定宽度求值线程的适当数量。例如,如果工作单元的数量除以4小于或等于处理系统104中的处理单元的数量,则电子数据表应用108确定宽度求值线程的该适当数量是工作单元的数量除以4,向下舍入。如果工作单元的数量除以4大于处理系统104中的处理单元110的数量,则电子数据表应用108确定宽度求值线程的该适当数量等于处理系统104中的处理单元110的数量。 接着,电子数据表应用108唤醒多个宽度求值线程(310)。该多个宽度求值线程中的宽度求值线程的数量等于宽度求值线程的该适当数量。在各种实施例中,电子数据表应用108执行各种动作来唤醒该多个宽度求值线程。例如,在一些实施例中,电子数据表应用108维护能够担当宽度求值线程的休眠线程池。在该示例中,电子数据表应用108唤醒该休眠线程池中的线程。在其他实施例中,电子数据表应用108例示以及唤醒新线程来充当宽度求值线程。宽度求值线程执行的示例操作关于图4被示出。在唤醒宽度求值线程之后,电子数据表应用108等待从宽度求值线程接收局部最大列宽(312)。在某些实施例中,在电子数据表应用108等待从宽度求值线程接收局部最大列宽的同时,电子数据表应用108可执行其他动作。接着,电子数据表应用108从宽度求值线程接收目标列的局部最大列宽(314)。局部最大列宽是由宽度求值线程确定的目标列的单元格中的最宽文本的宽度。电子数据表应用108从宽度求值线程中的每一个接收每一列的局部最大列宽。例如,如果电子数据表表格具有3列以及有2个宽度求值线程,则电子数据表应用108从第一宽度求值线程接收3个局部最大列宽并从第二宽度求值线程接收3个局部最大列宽。因为第一宽度求值线程和第二宽度求值线程对电子数据表中的不同行求值,第一宽度求值线程和第二宽度求值线程可对同一列返回不同的局部最大列宽。电子数据表应用108然后使用局部最大列宽来确定目标列的总体最宽列宽(316)。换言之,对于该组目标列中的每一列,电子数据表应用108通过标识该列的局部最大列宽中的最大值来为该列标识总体最大列宽。例如,如果有2个宽度求值线程且电子数据表应用108从一个宽度求值线程接收到局部最大列宽50并从另一个宽度求值线程接收到局部最大列宽60,则电子数据表应用108确定该列的总体最宽列宽是60。在标识了目标列的总体最大列宽之后,电子数据表应用108回流电子数据表表格,使得该组目标列中的每一列具有基于该列的总体最大列宽的宽度(318)。换言之,电子数据表应用108使得图形用户界面显示电子数据表表格,使得电子数据表表格的每一列具有基于该列的总体最大列宽的宽度。在各种实施例中,电子数据表应用108可使得该图形 用户界面以各种方式显示经回流的电子数据表表格。例如,在某些实施例中,电子数据表应用108可将数据发送给客户机设备202。客户机设备202被配置成显示经回流的电子数据表表格。在另一示例中,电子数据表应用108可在某些实施例中使用显示系统106来显示经回流的电子数据表表格。图4是示出宽度求值线程的示例操作400的流程图。操作400在宽度求值线程被电子数据表应用108唤醒时开始(402)。当电子数据表应用108唤醒宽度求值线程时,电子数据表应用108提供对该组目标列以及工作单元池的引用。宽度求值线程可在宽度求值线程唤醒时执行各种动作。例如,在某些实施例中,宽度求值线程初始化一组最大列宽。该组最大列宽包括用于该组目标列中的每一列的最大列宽。最初,每个最大列宽等于O。在唤醒之后,电子数据表应用108创建设备上下文(404)。设备上下文是用于定义被输出给屏幕或打印机的文本和图像的属性的数据结构。设备上下文包含各种属性。例如,设备上下文可包含指定窗口的默认字体、窗口的默认字体大小、窗口的上下文等等的属性。宽度求值线程然后确定工作单元池中是否有任何可用工作单元(406)。在当前列调整过程中,当没有宽度求值线程当前正在计算一工作单元的最大列宽以及没有宽度求值线程先前已经计算了该工作单元的最大列宽时,该工作单元是可用工作单元。在各种实施例中,宽度求值线程以各种方式确定是否有可用工作单元。例如,在一些实施例中,电子数据表应用108维护包含对应于每个工作单元的标志的数据结构。对应于某一工作单元的标志在该工作单元可用时具有一个值,而在该工作单元不可用时具有另一值。在另一示例中,电子数据表应用108生成包含对工作单元的引用的堆栈数据结构。如果堆栈数据结构为空,则工作单元池中没有可用工作单元。如果有一个或多个剩下的工作单元(406的“是”),则宽度求值线程从可用工作单元的池中选择一个工作单元(408)。参与列调整过程的每个宽度求值线程从可用工作单元的同一池中选择工作单元。例如,宽度求值线程“A”和宽度求值线程“B”正参与列调整过程,且可用工作单元的池包括工作单元“X”、“Y”和“Z”。在该示例中,宽度求值线程“Α”和宽度求值线程“B”都从工作单元“X”、“Y”和“Ζ”中选择可用工作单元。
当宽度求值线程选择了一个可用工作单元时,宽度求值线程锁定所选工作单元,使得没有其他宽度求值线程能够选择由该宽度求值线程选择的该工作单元。在各种实施例中,宽度求值线程以各种方式选择可用工作单元。例如,在一些实施例中,宽度求值线程以伪随机的方式选择一个可用工作单元。在其他实施例中,宽度求值线程基于分配给工作单元的顺序来选择一个可用工作单元。在又一些实施例中,宽度求值线程从包含到可用工作单元的引用的堆栈数据结构中弹出最上面的引用。由从堆栈数据结构弹出的引用所引用的工作单元是所选工作单元。宽度求值线程然后确定该组目标列中是否有任何剩下的列(410)。在各种实施例中,宽度求值线程以各种方式确定该组目标列中是否有任何剩下的列。例如,在一些实施例中,宽度求值线程生成包含到每个目标列的引用的堆栈数据结构。如果该堆栈数据结构非空,则宽度求值线程确定该组目标列中有剩下的列。在其他实施例中,宽度求值线程维护包含对应于每个目标列的标志的数据结构。标志在该列已被求值时具有一个值,而在该列未被求值时具有另一个值。宽度求值线程使用这些标志来确定是否有列是剩下的。如果在该组目标列中有一个或多个剩下的列(410的“是”),则宽度求值线程选择该组目标列中的剩下的列之一(412)。在各种实施例中,宽度求值线程以各种方式选择剩下的列之一。例如,在某些实施例中,宽度求值线程从最初包含到每个目标列的引用的堆栈数据结构弹出到所选列的引用。在其他实施例中,宽度求值线程选择该组目标列中最右侧剩下的列。在又一些实施例中,宽度求值线程以另一基础来选择剩下的列。宽度求值线程然后确定在所选列和所选工作单元中是否有任何剩下的单元格(414)。在各种实施例中,宽度求值线程以各种方式确定在所选列和所选工作单元中是否有任何剩下的单元格。例如,在某些实施例中,宽度求值线程维护行索引。行索引指示所选工作单元中的行。当宽度求值线程选择所选列时,行索引指示所选工作单元中具有最低行号的行。在该示例中,如果行索引指示所选工作单元中具有高于最高行号的行号的行,则宽度求值线程确定在所选列中没有剩下的单元格。如果存在位于所选列以及所选工作单元中的一个或多个剩下的单元格(414),则宽度求值线程选择位于所选列和所选工作单元中的剩下的单元格之一(416)。在各种实施例中,宽度求值线程以各种方式选择所选列和所选工作单元中的剩下的单元格列之一。例如,在某些实施例中,宽度求值线程维护如上所述的行索引。在该示例中,宽度求值线程选择行索引所指示的行中的单元格。宽度求值线程然后递增行索引。在选择了该单元格之后,宽度求值线程计算所选单元格的单元格宽度(418)。在各种实施例中,宽度求值线程以各种方式计算所选单元格的单元格宽度。例如,在某些实施例中,宽度求值线程调用图形应用编程接口(API)的文本范围(text extent)方法。当宽度求值线程调用文本范围方法时,宽度求值线程将所选单元格中的文本以及由宽度求值线程创建的设备上下文提供给文本范围方法。文本范围方法然后使用设备上下文的属性来确定所选单元格中的文本的宽度。文本范围方法将所选单元格中的文本的宽度返回给宽度求值线程。在某些实施例中,文本范围方法是微软|@\¥1\00\/3 操作系统的图形设备接口(GDI)API或GDI+API的一部分。在文本范围方法确定所选单元格的宽度的同时,文本范围方法锁定该设备上下文,使得没有其他进程或宽度求值线程能够读或写该文本上下文。如果全部宽度求值线程曾试图将相同的设备上下文提供给文本范围方法,则这些宽度求值线程将不得不等待其他宽度求值线程使用该设备上下文完成。为了减少关于设备上下文的这种争用,每个宽度求值线程创建单独的设备上下文。在为所选单元格计算了单元格宽度之后,宽度求值线程确定所选单元格的单元格宽度是否大于所选列的局 部最大列宽(420)。如果所选单元格的单元格宽度大于所选列的局部最大列宽(420的“是”),则宽度求值线程更新所选列的局部最大列宽(422)。例如,如果所选列的局部最大列宽是30像素而所选单元格的单元格宽度是40像素,则宽度求值线程更新所选列的局部最大列宽,使得所选列的局部最大列宽是40像素。然而,如果所选列的局部最大列宽是30像素而所选单元格的单元格宽度是20像素,则宽度求值线程不更新局部最大列宽。在更新了所选列的局部最大列宽之后或确定所选单元格的单元格宽度不大于所选列的局部最大列宽(420的“否”)之后,宽度求值线程再次确定是否有所选列和所选工作单元格中的剩下的单元格(414)。如果存在所选列和所选工作单元中的一个或多个剩下的单元格,则就所选列中的另一剩下的单元格而言,宽度求值线程重复步骤416、418、420以及可能的步骤422。然而,如果没有所选列和所选工作单元中的剩下的单元格(414的“否”),则宽度求值线程再次确定该组目标列中是否有任何剩下的列(410)。如果该组目标列中有一个或多个剩下的列,则就该组目标列中的另一剩下的列而言,宽度求值线程重复步骤412以及可能的步骤 414、416、418、420 和 422。如果所选工作单元中没有剩下的列(410的“否”),则宽度求值线程再次确定是否有任何剩下的工作单元(406)。如果有一个或多个剩下的工作单元,则就另一剩下的工作单元而言,宽度求值线程重复步骤408以及可能的步骤410、412、414、416、418、420和422。如果没有剩下的工作单元(406的“否”),则宽度求值线程将局部最大列宽提供给电子数据表应用108(424)。在将局部最大列宽提供给电子数据表应用108之后,宽度求值线程休眠(426)。图5是示出示例计算设备500的框图。在一些实施例中,计算系统100是使用类似计算设备500的一个或多个计算设备来实现的。应当理解,在其他实施例中,计算系统100是使用具有除了图5的示例所示之外的硬件组件的计算设备来实现的。在不同的实施例中,计算设备以不同方式实现。例如,在图5的示例中,计算设备500包括存储器502、处理系统504、辅助存储设备506、网络接口卡508、视频接口 510、显示设备512、外部组件接口 514、外部存储设备516、输入设备518、打印机520和通信介质522。在其他实施例中,计算设备是使用更多或更少的硬件组件来实现的。例如,在另一示例实施例中,计算设备不包括视频接口、显示设备、外部存储设备或输入设备。存储器502包括能够存储数据和/或指令的一个或多个计算机可读数据存储介质。如在本文档中所使用的,计算机可读数据存储介质是一种存储计算设备可读的数据和/或软件指令的设备或制品。在不同的实施例中,存储器502以不同的方式实现。例如,在各实施例中,存储器502是使用各种类型的计算机可读数据存储介质来实现的。示例类型的计算机可读数据存储介质包括,但不限于动态随机存取存储器(DRAM)、双倍数据率同步动态随机存取存储器(DDR SDRAM)、减少等待时间的DRAM、DDR2SDRAM、DDR3SDRAM、RambusRAM、固态存储器、闪存、只读存储器(ROM)、电可擦除可编程ROM和存储数据的其他类型的设备和/或制品。处理系统504包括选择性地执行软件指令的一个或多个物理集成电路。在各种实施例中,处理系统504以各种方式实现。例如,在一个不例实施例中,处理系统504被实现为一个或多个处理核。例如,在该不例实施例中,处理系统504可被实现为一个或多个IntelCore 2微处理器。在另一不例实施例中,处理系统504被实现为一个或多个单独的微处理器。在又一示例实施例中,处理系统504被实现为提供专用功能的ASIC。在又一示例实施例中,处理系统504通过使用ASIC和通过执行软件指令来提供专用功能。在不同的实施例中,处理系统504以不同的指令集来执行软件指令。例如,在各实施例中,处理系统504执行指令集中的软件指令,所述指令集诸如x86指令集、POWER指令集、RISC指令集、SPARC指令集、IA-64指令集、MIPS指令集,和/或其他指令集。辅助存储设备506包括一个或多个计算机可读数据存储介质。辅助存储设备506存储了处理系统504不能直接访问的数据和软件指令。换言之,处理系统504执行I/O操作以从辅助存储设备506处检索数据和/或软件指令。在各实施例中,辅助存储设备506由各 种类型的计算机可读数据存储介质来实现。例如,辅助存储设备506可以由一个或多个磁盘、磁带驱动器、CD-ROM盘、DVD-ROM盘、蓝光盘、固态存储设备、柏努利录音带(Bernoullicartridges)和/或其他类型的计算机可读数据存储介质来实现。网络接口卡508使得计算设备500能够将数据发送给计算机通信网络以及从计算机通信网络接收数据。在不同的实施例中,网络接口卡508以不同的方式实现。例如,在各种实施例中,网络接口卡508可以被实现为以太网接口、令牌环网络接口、光纤网络接口、无线网络接口(例如,WiFi、WiMax等)、或另一类型的网络接口。视频接口 510使计算设备500能够将视频信息输出给显示设备512。在不同的实施例中,视频接口 510以不同的方式实现。例如,在一个示例实施例中,视频接口 510被集成到计算设备500的主板上。在另一个示例实施例中,视频接口 510是视频扩展卡。示例类型的视频扩展卡包括由安大略省马克姆市的ATI Technologies有限公司制造的Radeon图形卡、由加利福尼亚州圣克拉拉市的Nvidia (英伟达)公司制造的Geforce图形卡、以及其他类型的图形卡。在各实施例中,显示设备512被实现为各种类型的显示设备。示例类型的显示设备包括但不限于阴极射线管显示器、IXD显示面板、等离子屏显示面板、触敏显示面板、LED屏幕、投影仪、以及其他类型的显示设备。在各实施例中,视频接口 510以各种方式与显示设备512通信。例如,在各实施例中,视频接口 510可以经由通用串行总线(USB)连接器、VGA连接器、数字视觉接口(DVI)连接器、S视频连接器、高清晰度多媒体接口(HDMI)接口、显示端口(DisplayPort)连接器、或其他类型的连接来与显示设备512通信。外部组件接口 514使计算设备500能够与外部设备通信。在各实施例中,外部组件接口 514以不同的方式实现。例如,在一个示例实施例中,外部组件接口 514是USB接口。在其他示例实施例中,计算设备500是火线接口、串行端口接口、并行端口接口、PS/2接口、和/或使计算设备500能够与外部组件通信的另一种类型的接口。在不同的实施例中,外部组件接口 514使计算设备500能够与不同的外部组件通信。例如,在图5的示例中,外部组件接口 514使计算设备500能够与外部存储设备516、输入设备518和打印机520通信。在其他实施例中,外部组件接口 514使计算设备500能够与更多或更少的外部组件通信。其他示例类型的外部组件包括但不限于扬声器、电话充电插口、调制解调器、媒体播放器底座、其他计算设备、扫描仪、数码相机、指纹读取器、以及可被连接到计算设备500的其他设备。外部存储设备516是包括一个或多个计算机可读数据存储介质的外部组件。计算设备500的不同实现与不同类型的外部存储设备对接。示例类型的外部存储设备包括但不局限于磁带驱动器、闪存模块、磁盘驱动器、光盘驱动器、闪存单元、zip盘驱动器、光学自动唱片机、以及包括一个或多个计算机可读数据存储介质的其他类型的设备。输入设备518是向计算设备500提供用户输入的外部组件。计算设备500的不同实现与不同类型的输入设备对接。示例类型的输入设备包括,但不局限于,键盘、鼠标、轨迹球、笔输入设备、按键式拨号盘、话筒、操纵杆、触敏显示屏、以及将用户输入提供给计算设备500的其他类型的设备。打印机520是将数据打印到纸张的外部设备。计算设备500的不同实现与不同类型的打印机对接。示例类型的打印机包括但不限于激光打印机、喷墨打印机、照片打印机、复印机、传真机、票据打印机、点阵打印机、或将数据打印到纸张的其他类型的设备。通信介质522方便了在计算设备500的硬件组件之间的通信。在不同的实施例 中,通信介质522方便了在计算设备500的不同组件之间的通信。例如,在图5的示例中,通信介质522方便了在存储器502、处理系统504、辅助存储设备506、网络接口卡508、视频接口 510以及外部组件接口 514之间的通信。在计算设备500的不同的实现中,通信介质522以不同的方式来实现.例如,在计算设备500的不同的实现中,通信介质522可作为PCI总线、PCI Express总线、加速图形端口(AGP)总线、Infiniband互连、串行高级技术附件(ATA)互连、并行ATA互连、光纤通道互连、USB总线、小型计算系统接口(SCSI)接口,或其他类型的通信媒介来实现。存储器502存储了各种类型的数据和/或软件指令。例如,在图5的示例中,存储器502存储了基本输入/输出系统(BIOS) 524、操作系统526、应用软件528和程序数据530。BIOS 524包括当由处理系统504执行时使得计算设备500启动的一组软件指令。操作系统526包括当由处理系统504执行时使得计算设备500提供操作系统的一组软件指令,所述操作系统协调计算设备500的活动和资源的共享。示例类型的操作系统包括但不限于微软Windows'".、Linux、Unix、苹果 OS X、苹果 OS X iPhone、Palm webOS、Palm OS、谷歌Chrome OS、谷歌Android OS等等。应用软件528包括一组软件指令,该组软件指令在被处理系统504执行时使得计算设备500向计算设备500的用户提供应用。程序数据530是应用软件528生成和/或使用的数据。上述各实施例仅作为说明提供,并且不应被解释为限制。本领域的技术人员将容易地识别出可能不遵循在此说明并描述的示例实施例和应用而做出的各种修改和变化。例如,在图中示出的操作仅仅是示例。在各种实施例中,类似的操作可以包括比在图中所示出的那些步骤更多或更少的步骤。而且,在其他实施例中,类似的操作可以包括与在图中所示出的那些操作步骤不相同的顺序的步骤。
权利要求
1.一种方法,包括 由计算系统执行列调整过程,所述列调整过程使用多个线程来确定电子数据表表格中的一组目标列中每一列的总体最大列宽,该组目标列包括至少一列;以及 回流所述电子数据表表格,使得该组目标列中的每一列具有基于该列的总体最大列宽的宽度。
2.如权利要求I所述的方法,其特征在于,执行所述列调整过程包括 将所述电子数据表表格划分成多个工作单元,每个宽度求值线程从所述多个工作单元中选择一个或多个工作单元,以及确定一个或多个所选工作单元中的每一列的局部最大列宽;以及 对该组目标列中的每一列,通过标识该列的局部最大列宽中的最大值来标识总体最大列宽。
3.如权利要求2所述的方法,其特征在于 执行所述列调整过程包括基于所述多个工作单元中工作单元的数量以及基于处理系统中处理单元的数量来确定宽度求值线程的适当数量; 宽度求值线程的数量等于宽度求值线程的所述适当数量。
4.如权利要求I所述的方法,其特征在于,执行所述列调整过程包括 确定该组目标列中的单元格的数量是否超出下限;以及 当该组目标列中的单元格的数量没有超出下限时,使用单个线程来确定总体最大列宽。
5.如权利要求I所述的方法,其特征在于 每个宽度求值线程创建一设备上下文;以及 每个宽度求值线程使用由该宽度求值线程所创建的设备上下文来对该组目标列中的单元格中的文本的宽度求值。
6.如权利要求I所述的方法,其特征在于 所述电子数据表表格的单元格中的值是从一个或多个外部数据源中的数据得到的;以及 所述方法还包括当所述电子数据表表格的单元格中的值根据所述一个或多个外部数据源被刷新时,开始所述列调整过程。
7.如权利要求I所述的方法,其特征在于,还包括由所述计算系统接收来自用户的一个或多个列选择输入,所述一个或多个列选择输入指示该组目标列中的列。
8.一种计算系统,包括 包括一个或多个处理单元的处理系统;以及 存储表示电子数据表应用的计算机可读指令的数据存储系统,所述计算机可读指令在被所述一个或多个处理单元执行时使得所述计算系统提供所述电子数据表应用,所述电子数据表应用配置成 执行行调整过程,当电子数据表表格中的一组目标行中的单元格的数量超过下限时,所述行调整过程使用多个线程来确定该组目标行中每一行的总体最大行高,该组目标行包括至少一行;以及 回流所述电子数据表表格,使得该组目标行中的每一行具有基于该行的总体最大行高的高度。
9.如权利要求8所述的计算系统,其特征在于,所述电子数据表应用执行以下动作作为行调整过程的一部分 将所述电子数据表表格划分成多个工作单元,每个高度求值线程从所述多个工作单元选择一个或多个工作单元,以及确定一个或多个所选工作单元中的每一行的局部最大行高,其中除了一剩余工作单元之外的每个工作单元包含相同数量的列;以及 对该组目标行中的每一行,通过标识该行的局部最大行高中的最大值来标识总体最大行闻。
10.如权利要求9所述的计算系统,其特征在于,所述电子数据表应用执行以下动作作为所述行调整过程的一部分 基于所述多个工作单元中工作单元的数量以及基于所述处理系统中处理单元的数量来确定高度求值线程的适当数量; 高度求值线程的数量等于高度求值线程的所述适当数量。
11.如权利要求8所述的计算系统,其特征在于,所述电子数据表应用执行以下动作作为所述行调整过程的一部分 确定该组目标行中的单元格的数量是否超出下限;以及 当该组目标行中的单元格的数量没有超出下限时,使用单个线程来确定总体最大行闻。
12.如权利要求8所述的计算系统,其特征在于,每个高度求值线程创建一设备上下文,以及使用该设备上下文来对该组目标行中的单元格中的文本的高度求值。
13.如权利要求8所述的计算系统,其特征在于,所述电子数据表应用使用显示系统来将所述电子数据表表格显示给所述电子数据表应用的用户。
14.如权利要求8所述的计算系统,其特征在于,该组目标行包括所述电子数据表表格中的行的一些但非全部。
15.一种存储计算机可读指令的计算机可读数据存储介质,所述计算机可读指令在由计算系统的处理系统中的一个或多个处理单元执行时,使所述计算系统提供电子数据表应用,所述电子数据表应用配置成 致使图形用户界面显示电子数据表表格; 接收来自所述电子数据表应用的用户的一个或多个列选择输入,所述一个或多个列选择输入指示所述电子数据表表格中的一组目标列,该组目标列包括所述电子数据表表格中的一个或多个列; 确定该组目标列中的单元格的数量是否超出下限; 当该组目标列中的单元格的数量没有超出下限时,使用单个线程来确定所述目标列的总体最大列宽; 当该组目标列中的单元格的数量超出下限时,执行以下动作 将所述电子数据表表格的行划分成多个工作单元,除了可能的一剩余工作单元之外的每个工作单元包含相同数量的行; 基于所述多个工作单元中工作单元的数量以及基于所述处理系统中处理单元的数量来确定宽度求值线程的适当数量;唤醒多个宽度求值线程,所述多个宽度求值线程中的宽度求值线程的数量等于宽度求值线程的所述适当数量,所述多个宽度求值线程中的每个宽度求值线程执行以下动作直到所述多个工作单元中没有剩下的工作单元为止 创建一设备上下文; 选择所述多个工作单元中的一个或多个工作单元; 使用设备上下文之一来计算一个或多个所选工作单元中的单元格中的文本的宽度;使用所述一个或多个所选工作单元中的单元格中的文本的宽度来确定该组目标列中的每一列的局部最大列宽;以及 使用由宽度求值线程确定的局部最大列宽来确定该组目标列的总体最大列宽; 回流所述电子数据表表格,使得该组目标列中的每一列具有基于该列的总体最大列宽的宽度,从而使得所述电子数据表表格被显示给所述电子数据表应用的用户。·
全文摘要
计算系统执行列调整过程。列调整过程使用多个线程来确定电子数据表表格中的一组目标列中的每一列的总体最大列宽。对于目标列中的每个目标列,该目标列的总体最大列宽基于该列中任何单元格中的值的最宽文本表示的宽度。该组目标列包括至少一列。计算系统然后回流电子数据表表格,使得该组目标列中的每一列具有基于该列的总体最大列宽的宽度。类似的过程被执行以调整行的高度。
文档编号G06F9/46GK102939580SQ201180022369
公开日2013年2月20日 申请日期2011年4月16日 优先权日2010年5月5日
发明者T·霍克, C·B·罗特席勒, 吴树标 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1