google-sheets - 如何获取所有非空列及其内容?
问题描述
我想知道如何在使用工作表一部分的数据时过滤掉空列,而不必指定每个列名,因为可以添加更多列。
我找到了这个站点并在那里尝试了公式,但似乎有时它会包含该列(意味着它有一个非空值),但它不包含该值,因此该列看起来是空白但不应该是。
=ArrayFormula(Query(transpose(Query(TRANSPOSE({Query({'Test Data'!A1:Z1;Query({if('Test Data'!A2:Z<>"",1,0)},"Select "&JOIN(",","Sum(Col"&column('Test Data'!A1:Z1)&")"))},"Offset 1",1);'Test Data'!A2:Z}),"Select * Where Col2>0")),"Select * Offset 1",1))
我目前有这个:
| | english | math | science |
|:-----------|------------:|:------------:|:-----------:|
| 8:30 | bob,jill | | |
| 9:40 | | | |
| 10:15 | | | mike |
我想要这个(可以让一行为空):
| | english | science |
|:-----------|------------:|:-----------:|
| 8:30 | bob,jill | |
| 9:40 | | |
| 10:15 | | mike |
任何帮助,将不胜感激。
解决方案
这样做的最好方法是再次重新旋转它,例如:
=ARRAYFORMULA(QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:Z<>"", B2:Z, "♥")&"♦"&B1:Z1, )), "♠")), "♦"),
"select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3"))
如果您想保留所有时间,您将需要:
=ARRAYFORMULA({QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"),
"select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3 limit 0");
{A2:A, IFERROR(VLOOKUP(A2:A, QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"),
"select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3"),
TRANSPOSE(ROW(INDIRECT("A2:A"&COLUMNS(QUERY(SPLIT(TRANSPOSE(SPLIT(CONCATENATE(
IF(A2:A<>"", "♠"&A2:A&"♦"&IF(B2:E<>"", B2:E, "♥")&"♦"&B1:E1, )), "♠")), "♦"),
"select Col1,max(Col2) where Col2 <> '♥' group by Col1 pivot Col3 limit 0"))))), 0))}})
推荐阅读
- c++ - C++ 多线程使用 std::locale 分隔数千 - 奇怪的结果
- reactjs - Formik Yup - 检查字段是否有重复值
- java - 我应该如何在 Java 游戏中进行内存管理?
- angular - 如何在 Angular 中覆盖组件的 CSS 样式?
- ubuntu - 使用 Makefile 调试 CLion [UNIX]
- python - Pandas:根据组聚合添加新行
- javascript - 如何仅使用 JavaScript 创建多个登录和注册表单并存储到本地服务器
- ios - 使用出队 UICollectionViewCell 和 TableViewCell 的问题
- python - Pygame Zero:创建多个关卡
- acumatica - PXFormula 和 SumCalc 计算不正确(字段值加倍)