Skip to content

Commit 1503e33

Browse files
authored
Fix selected header columns with no name (#95)
Generate a unique name for columns with no heading text.
1 parent 04b6c80 commit 1503e33

File tree

4 files changed

+47
-2
lines changed

4 files changed

+47
-2
lines changed

fixtures/trailing-column.csv

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
A,B,
2+
1,2,

lib/importer/backend.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const testFiles = new Map([
1010
["merged-cells", [
1111
["merged-cells.xlsx", "Cool Data"],
1212
["merged-cells.csv", "Sheet1"]
13-
//["merged-cells.ods", "Cool Data"]
13+
// ["merged-cells.ods", "Cool Data"]
1414
]],
1515
["tribbles", [
1616
["tribbles.xlsx", "My lovely tribbles"],

lib/importer/sheets.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,17 @@ exports.ListSheets = (session) => {
1515
// it's intended for driving a list of available columns in the header.
1616
exports.GetHeader = (session) => {
1717
const headerSample = backend.SessionGetInputSampleRows(session.backendSid, session.headerRange, 1, 0, 0);
18-
return headerSample[0][0].map((sample) => sample.value);
18+
let untitledCount = 1;
19+
return headerSample[0][0].reduce((acc, sample) => {
20+
let columnName = sample ? sample.value : (() => {
21+
let name = `[Untitled column ${untitledCount}]`;
22+
untitledCount += 1;
23+
return name;
24+
})();
25+
26+
acc.push(columnName);
27+
return acc
28+
}, []);
1929
};
2030

2131
function processMergedCells(wantedColumns, preview) {

lib/importer/sheets.test.js

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
const session_lib = require('./session');
2+
const sheets_lib = require('./sheets');
3+
4+
test('trailing columns', () => {
5+
const response = session_lib.CreateSession(
6+
{
7+
fields: ['field'],
8+
uploadPath: "../../fixtures",
9+
},
10+
{
11+
file: {
12+
mimetype: "text/csv",
13+
filename: "trailing-column.csv"
14+
}
15+
}
16+
);
17+
18+
expect(response.error).toBe(undefined);
19+
expect(response.id).not.toBe('');
20+
21+
const session = response.session
22+
session.sheet = "Sheet1" // It's a CSV, and this is the default sheet name
23+
session.headerRange = {
24+
sheet: session.sheet,
25+
start: {row: 0, column: 0},
26+
end: {row: 0, column: 2},
27+
};
28+
29+
30+
let headers = sheets_lib.GetHeader(session)
31+
expect(headers.length).toBe(3);
32+
expect(headers).toStrictEqual(['A', 'B', '[Untitled column 1]'])
33+
});

0 commit comments

Comments
 (0)