格式化MS Access表格

时间:2018-09-11 17:13:44

标签: ms-access

我希望表单数据水平对齐而不是垂直对齐。 这是当前显示的表单的快照。

enter image description here

我想更改它,使其看起来像这样:

Set xmlDoc = CreateObject( "Microsoft.XMLDOM" )
xmlDoc.Async = "False"
xmlDoc.Load("C:\Program Files (x86)\Mail Enable\Postoffices\ACS\MAILROOT\name\Inbox\_index.xml")

strQuery = "//ELEMENT/ (FROM | TO | SUBJECT)"
'strQuery = "ELEMENT"

Set colNodes = xmlDoc.SelectNodes(strQuery)
For Each objNode In colNodes
    WScript.Echo objNode.NodeName & ": " & objNode.Text
Next

如何更改对齐方式,以使列标题显示为行标题,并且其对应的值水平显示而不是垂直显示?


谢谢你们的答复和建议 @CPerkins

到目前为止,我已经生成了此查询

+------------+--------+--------+--------+--------+--------+
| Subject    | 56-020 | 56-020 | 56-020 | 56-020 | 56-020 |
| TargetDays | .      | 0      | 1      | 2      | 6      |
| MAP        | 80     | 67     | 84     | 73     | 85     |
+------------+--------+--------+--------+--------+--------+

这会产生这样的结果

TRANSFORM First(VITALS.MAP) AS FirstOfMAP
SELECT VITALS.Subject
FROM VITALS
GROUP BY VITALS.Subject
ORDER BY Val(VITALS.TargetDays)
PIVOT VITALS.TargetDays;

它给出所有主题的结果。主题为行标题,目标日期显示为列名称,相应的MAP值显示为值。我对此有两个疑问。

  1. 我想对列值进行排序 例如,当前显示为

    主题_ 0 1 13 2 20 28 6 9

我希望它显示为

Subject _   0   1   13  2   20  28  6   9
22-001  82  75  102 .   80  .   .   89  83
24-002  .   .   .   .   .   .   .   .   .
Subject _   0   1   13  2   20  28  6   9
25-001  .   .                           
27-001  110 63  87  .   92  .   .   124 96
  1. 我想获得每个学科的成绩。我不想一次显示所有主题。 还可以隐藏Subject(行标题)吗?

请告诉我如何实现?

谢谢。

P.S:有人告诉我们可以像矩阵一样使用辅助表来转置表。有谁知道如何做到这一点?谷歌搜索后,我发现这个概念没有可理解的来源。

2 个答案:

答案 0 :(得分:0)

术语:由于该问题涉及将行转换为列,将列转换为行-包括中间结构和逻辑,因此详细说明可能会引起混淆。我将使用术语 record 来引用源表/查询行,并使用术语 field 来引用相应的列。这些已经是讨论关系数据库时常用的术语,但是我专门将这些术语与其上下文分开使用,例如水平或垂直,行或列。对术语的任何使用都是故意的,并且暗含特定表或查询的上下文。


Access不支持带有右侧标题的本机水平报告,并且数据记录自动从左到右列出。正如评论中指出的那样,交叉表查询(或数据透视表)是用于汇总数据的,它不会产生默认报表的完全水平版本,所有表的列和行及其标题正在转变。

另一种方法是将转换后的数据放入单独的辅助表中,然后生成一个以辅助表为其RecordSource的报告。报表设计器中适当的格式可以应用于模拟水平标题等。

注意事项:此技术仅是一种有用的解决方法,用于生成记录有限的简短水平报告,尤其对子报告有用。此技术将不会生成跨多个页面的完整水平报告,也不会生成自动调整大小的列以及其他可用于内置垂直报告行为的功能。 (如果您很聪明,也许可以开发多页报告,但是如果有必要,您应该考虑使用另一种方法,也许可以使用第三方报告生成实用程序。)

  1. 创建一个辅助表。

    • 定义一个名为[field_header]的列。指定必须填写。
    • 为源查询的每个转换后的记录定义列。

      • 由于记录顺序应灵活,因此只需依次命名即可,例如[Record001][Record002],...
      • 注意事项已经成为注释,因此请意识到您将需要某种方式来选择数量有限的记录。 (如果排除了记录,则您可能应该有某种方式在报告中注明。)
      • 数据类型可能需要为文本,因为它将存储不同数据类型的格式的值。仅当数据集中的每个字段都具有相同的类型时,才应选择该特定数据类型。
      • 使这些列为“非必需”(即可为空),以便您以最有效的方式填充记录,尤其是因为每个表行都将包含来自多个源记录的数据。
  2. 填充辅助表。

    • 对于每个源字段:
      • 添加新的辅助行,并将字段名称/标题分配给辅助表[field_header]的列值。
      • 特定顺序查询源字段。对于添加到辅助表的每一行,此顺序应匹配,以便不会混淆源记录。例如,如果获得单个排序的记录集并重复枚举,而不是每次都重新查询源,则可以隐式维护此顺序。
      • 对于相同的源字段,重复读取源字段值并将其放入相应的辅助表列值中。源值应设置为文本格式,但应显示在实际报告中。您将无法使用所有报表设计器的各种格式设置选项。例如:货币值-4.95应该转换为适当的格式,例如“(($ 4.95)””。
  3. 使用辅助表作为RecordSource创建报告。

    • 将表列添加到报告中。
    • 使用独特的标题格式为[field_header]设置列格式。也许添加一条垂直线或其他可以将其区分为标题的行。

整个过程可能应该在Visual Basic(VBA)函数中完成。就其性质而言,此类代码支持多种方法来执行此操作,例如通过生成和执行SQL语句,或使用DAO记录集和Access Automation对象进行表定义等。替代编程对象为“ Microsoft ActiveX数据对象”和“ Microsoft ADO Ext”。 。。。

答案 1 :(得分:-2)

好像您在布局视图中。如果切换到设计视图,则可以将设计控件放置在所需的任何方向。可以在界面上拖动它们,并根据需要调整方向。如果您对使用该界面有特定疑问,请在评论中回复。

另一个注意事项是您可能已为这些控件分配了“布局”。您需要通过拖动单击或通过单击组右上角的+来全部选择它们,右键单击组中的一个控件,然后转到布局并单击“删除布局”。这样一来,控件就可以彼此独立移动。

最后一件事,这只是首选项,但我通常希望将它们设置为“弹出窗口”,以便它们出现在新窗口中。我发现它使设计更符合我在设计表格时的想法。只是我的2美分。可以在表单属性的“其他”标签中找到。