Excel.run(async (context) => {
// Ottieni il foglio di lavoro attivo
const workbook = context.workbook;
const sheet = workbook.worksheets.add("Tabella Mensile");
sheet.activate();
// Chiedi all'utente il numero di colonne
const numColonne = parseInt(prompt("Quante colonne
vuoi aggiungere (oltre alla colonna delle date)?", "3"));
// Chiedi i nomi delle colonne
let nomiColonne = [];
for (let i = 0; i < numColonne; i++) {
const nome = prompt(`Inserisci il nome della colonna ${i
+ 1}:`, `Colonna ${i + 1}`);
nomiColonne.push(nome);
}
// Determina la data di inizio (primo giorno del mese
successivo)
const today = new Date();
const nextMonth = new Date(today.getFullYear(),
today.getMonth() + 1, 1);
const startDate = new Date(nextMonth.getFullYear(),
nextMonth.getMonth(), 1);
// Genera un array di date per il mese
const dates = [];
const month = startDate.getMonth();
let currentDate = new Date(startDate);
while (currentDate.getMonth() === month) {
dates.push(currentDate.toLocaleDateString());
currentDate.setDate(currentDate.getDate() + 1);
}
// Inserisci le date nella prima colonna
const dateRange = sheet.getRange(`A2:A${dates.length +
1}`);
dateRange.values = dates.map((date) => [date]);
// Inserisci i nomi delle colonne nella riga 1
const headerRange =
sheet.getRange(`A1:${String.fromCharCode(65 +
numColonne)}1`);
headerRange.values = [["Date", ...nomiColonne]];
// Formatta i bordi
const tableRange =
sheet.getRange(`A1:${String.fromCharCode(65 +
numColonne)}${dates.length + 1}`);
tableRange.format.borders.getItem("EdgeTop").style =
"Continuous";
tableRange.format.borders.getItem("EdgeBottom").style =
"Continuous";
tableRange.format.borders.getItem("EdgeLeft").style =
"Continuous";
tableRange.format.borders.getItem("EdgeRight").style =
"Continuous";
tableRange.format.borders.getItem("InsideVertical").style =
"Continuous";
tableRange.format.borders.getItem("InsideHorizontal").style
= "Continuous";
// Formatta l'intestazione (centro e grassetto)
headerRange.format.font.bold = true;
headerRange.format.horizontalAlignment = "Center";
// Autosize colonne
sheet.getUsedRange().format.autofitColumns();
// Commit dei cambiamenti
await context.sync();
console.log("Tabella mensile creata con successo!");
}).catch((error) => {
console.error(error);
});
Sub CreaTabellaMensile()
Dim ws As Worksheet
Dim numColonne As Integer
Dim nomiColonne() As String
Dim primaData As Date
Dim ultimaData As Date
Dim i As Integer
Dim rigaIniziale As Integer
Dim colonnaIniziale As Integer
Dim rng As Range
' Aggiunge un nuovo foglio di lavoro
Set ws = ThisWorkbook.Sheets.Add
ws.Name = "Tabella Mensile"
ws.Activate
' InputBox per numero di colonne
numColonne = Application.InputBox("Quante colonne
vuoi aggiungere (oltre alla colonna delle date)?",
"Numero di Colonne", Type:=1)
If numColonne < 1 Then Exit Sub
' Chiede i nomi delle colonne
ReDim nomiColonne(1 To numColonne)
For i = 1 To numColonne
nomiColonne(i) = Application.InputBox("Inserisci il
nome della colonna " & i & ":", "Nome Colonna " & i,
"Colonna " & i, Type:=2)
If nomiColonne(i) = "" Then Exit Sub
Next i
' Calcola la prima data del mese successivo
primaData = DateSerial(Year(Date), Month(Date) + 1,
1)
ultimaData = DateSerial(Year(Date), Month(Date) + 2,
0)
' Inserisce i nomi delle colonne nella prima riga
rigaIniziale = 1
colonnaIniziale = 1
ws.Cells(rigaIniziale, colonnaIniziale).Value = "Date"
For i = 1 To numColonne
ws.Cells(rigaIniziale, colonnaIniziale + i).Value =
nomiColonne(i)
Next i
' Inserisce le date nella prima colonna
Dim dataCorrente As
javascript
vba
Tabella mensile dinamica