【发布时间】:2025-11-26 14:30:01
【问题描述】:
我必须首先说我对 VBA 或一般宏并不熟悉。
我有一个 Excel 文件,其中包含一些“基本项目”的单独工作表。
每个工作表都包含产品和配件之间的关系。数字,如果为 0,则表示不兼容,任何大于 0 的数字,都是可以与产品配套的配件数量。
每个工作表包含不同的附件和代码,但可能会出现一些重复。
数据示例:
| | J0021 | J0022 |
|:-----------|------------:|:------------:|
| Product 1 | 1 | 1 |
| Product 2 | 1 | 2 |
| Product 3 | 1 | 1 |
| Product 4 | 0 | 0 |
| Product 5 | 0 | 1 |
| Product 6 | 1 | 0 |
有 43 个单独的工作表,以及表示关系的 500 到 2000 个单元格。
我正在考虑只使用一个一对一的表,以下列方式表示关系:
Table Name: ProductAccessoryCompat
Id (Primary Key) | ProductId (Foreign Key) | AccessoryId(Foreign Key) | Count
-------------------|-------------------------|--------------------------|------
LB1 (ProdBase+Num) | Product 1 | J0021 | 1
LB2 | Product 1 | J0022 | 1
FV1 | Product 2 | J0021 | 1
FV2 | Product 2 | J0022 | 2
BG1 | Product 3 | J0021 | 1
BG2 | Product 3 | J0022 | 1
HG1 | Product 4 | J0021 | 0
HG2 | Product 4 | J0022 | 0
JJ1 | Product 5 | J0021 | 0
JJ2 | Product 5 | J0022 | 1
JL1 | Product 6 | J0021 | 1
JL2 | Product 6 | J0022 | 0
工作表具有相同类型的数据,但会有不同的产品列和不同的行。
我知道我需要将它们全部连接到一个工作表中,然后将其导出为 CSV,然后将该 CSV 导入 MySQL。
谁能帮我确定如何按照我为要创建的表格描述的格式将不同的工作表连接成一个工作表?
我认为它会类似于以下天真的伪代码:
var NumOfSheets = Workbook.Worksheets.Count;
var newSheet = Workbook.CreateSheet();
for (i = 0; i < NumOfSheets; i++)
{
var curSheet = Workbook.GetSheet(i);
curSheet.Activate;
var numColumns = curSheet.Columns.Count;
var numRows = curSheet.Rows.Count;
var relationships = new Dictionary<string, string>();
for (j = 0; j < numRows; j++)
{
var currentProd = curSheet.getCell(j, 0);
for(k = 0; k < numColumns; j++)
{
var currentAcc = curSheet.getCell(0, k);
var relationship = curSheet.getCell(j, k);
if (relationship != 0) var relationships[currentProd][currentAcc] = relationship;
}
}
}
[Then iterate through the 2D associative array, inserting
a new row for each product, and a new column for each
accessory that each do net yet exist on the spreadsheet.]
我几乎认为手工操作会更容易,但你知道,懒惰会获胜。
编辑:我刚刚意识到我可能只是忽略 0 列,所以我将其添加到伪代码中。
【问题讨论】:
-
啊——太接近了。这基本上就是我要寻找的,但两者都假设标题在整个工作表中是一致的。每个工作表中的标题都不完全相同。它们是配件的名称。
标签: c# excel merge office-interop