将 table 的内容导出到不同的 EXCEL 文件和不同的工作表
Export contents of table to different EXCEL files and different worksheets
我有一套公寓 table,其中包含以下内容:
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)。
- 001 将包含 3 条记录,002 将包含 2 条记录。
- 文件
B.xlsx
将包含 1 个工作表 (002)。
- 002 将包含 1 条记录。
- 文件
C.xlsx
将包含 3 个工作表(003、006 和 008)。
- 每个包含 1 条记录。
解决这个问题的最佳方法是什么?大约有 12 个类别,总共包含大约 200 个系列,包含最少 1 和最多 14.000 种产品。
Greetz Henrov
通过此查询,您将获得您的公寓 table 以及文件名和 sheet 的名称(填充为 3 位数字)。
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
与DISTINCT
等。应该很容易获得您需要的所有信息。
您需要进一步的帮助吗?
你让我把我的评论变成一个答案...
安装Excel并告诉Excel从外部源导入数据。助手将引导您创建 ODC 连接。这真的很容易。结果是您会找到用于打开连接的连接字符串。
这个讨论给你some VBA。
在 VBA 中,首先您为 DISTINCT
sheet-名称调用 SELECT
。将它们放在一个数组中。
比起你遍历这个数组并始终使用相同的 SELECT
和 WHERE SheetName='YourSheetName'
来只检索一个特殊文件所需的数据。
比你用Set wb=Workbooks.Add()
用实际文件名创建一个新的工作簿(首先声明变量!)来获得参考。
使用 Set ws=wb.Worksheets.Add()
根据 DISTINCT sheet 名称列表创建 sheet。然后填写 sheet 并保存。如果您需要更多帮助,请致电..
代码大概是这样的:
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
我有一套公寓 table,其中包含以下内容:
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)。 - 001 将包含 3 条记录,002 将包含 2 条记录。
- 文件
B.xlsx
将包含 1 个工作表 (002)。 - 002 将包含 1 条记录。
- 文件
C.xlsx
将包含 3 个工作表(003、006 和 008)。 - 每个包含 1 条记录。
解决这个问题的最佳方法是什么?大约有 12 个类别,总共包含大约 200 个系列,包含最少 1 和最多 14.000 种产品。
Greetz Henrov
通过此查询,您将获得您的公寓 table 以及文件名和 sheet 的名称(填充为 3 位数字)。
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
与DISTINCT
等。应该很容易获得您需要的所有信息。
您需要进一步的帮助吗?
你让我把我的评论变成一个答案...
安装Excel并告诉Excel从外部源导入数据。助手将引导您创建 ODC 连接。这真的很容易。结果是您会找到用于打开连接的连接字符串。
这个讨论给你some VBA。
在 VBA 中,首先您为 DISTINCT
sheet-名称调用 SELECT
。将它们放在一个数组中。
比起你遍历这个数组并始终使用相同的 SELECT
和 WHERE SheetName='YourSheetName'
来只检索一个特殊文件所需的数据。
比你用Set wb=Workbooks.Add()
用实际文件名创建一个新的工作簿(首先声明变量!)来获得参考。
使用 Set ws=wb.Worksheets.Add()
根据 DISTINCT sheet 名称列表创建 sheet。然后填写 sheet 并保存。如果您需要更多帮助,请致电..
代码大概是这样的:
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