我有一张包含以下内容的平面表:
Categorie | Series | Productdetails
A A.001 1
A A.001 2
A A.001 3
A A.002 1
A A.002 2
B A.002 1
C A.003 1
C A.006 2
C A.008 3
所以我们的类别有多个系列,有多个产品。 Productdetails由277列组成......真的:(
我想将此数据导出到Excel,但我要求每个类别提供一个excel文件,每个系列包含工作表,其中包含该系列的所有产品。
在上面的示例中,将导致3个excel文件:A.xlsx,B.xlsx和C.xlsx。
A.xlsx
将包含2个工作表(001和002)。 B.xlsx
将包含1个工作表(002)。 C.xlsx
将包含3个工作表(003,006和008)。 解决这个问题的最佳方法是什么?大约有12个类别,总共约200个系列,包含最小1和最多14.000个产品。
Greetz Henrov
答案 0 :(得分:1)
通过此查询,您可以获得平面表格以及文件的名称和工作表的名称(填充为3位数字)。
0
这样的查询可以为您提供所需的计数:
SELECT tbl.Categorie + '.xlsx' AS ExcelFile
,REPLACE(STR(DENSE_RANK() OVER(PARTITION BY tbl.Categorie ORDER BY tbl.Categorie,tbl.Series),3),' ','0') AS ExcelSheetPadded
,tbl.*
FROM @tbl AS tbl
使用SELECT tbl.Categorie + '.xlsx' AS ExcelFile
,COUNT(*) AS CountPerSheet
FROM @tbl AS tbl
GROUP BY tbl.Categorie,tbl.Series
等。它应该很容易获得你需要的所有信息。
您还需要任何进一步的帮助吗?
答案 1 :(得分:1)
你让我把我的评论写成答案......
安装Excel并告诉Excel从外部源导入数据。助理将引导您创建ODC连接。这真的很容易。结果,您将找到用于打开连接的连接字符串。
此讨论为您提供some VBA。
在VBA首先,您为SELECT
工作表名称调用DISTINCT
。把它们放在一个数组中。
比遍历此数组并使用SELECT
始终使用WHERE SheetName='YourSheetName'
来检索一个特殊文件所需的数据。
比使用Set wb=Workbooks.Add()
创建一个带有实际文件名的新工作簿(首先声明变量!)来获取引用。
使用Set ws=wb.Worksheets.Add()
根据DISTINCT工作表名称列表创建工作表。然后填写表格并保存。如果您需要更多帮助,请致电..
代码大致应该是这样的:
Dim wb As Workbook
Dim ws As Worksheet
'Open connection and fill a Recordset with the distinct filenames
'Do this in a loop for all distinct file names
Set wb = Workbooks.Add()
wb.Name = "YourNameFromDistinctList"
'Fill another Recordset with the distinct sheet names for each workbook
'Do this in a loop for all distinct file names for each workbook
Set ws = wb.Worksheets.Add()
ws.Name = "YourSheetName"
'Fill Sheet with data
'either use ws.ListObjects
'or traverse through ws.Cells
Set ws = Nothing
wb.SaveAs "YourNameFromDistinctList"
Set wb = Nothing