>ps: dato che non ho conoscenze specifiche di programmazione,
>spero che la cosa sia gestibile senza scrivere del codice...
secondo me di codice devi scriverne per forza, non hai alternative...non sarà tanto ma qualcosa devi scrivere se vuoi rendere parametrizzabile la sorgente dati.
Io ti consiglierei questo iter:
1) definisci il report disegnandolo, dandogli in pasto una sorgente dati (magari un db access temporaneo) basta che rispecchi il contenuto del file xls
2) da codice leggi il file xls, o xml, etc...riportandoti alla stessa struttura che hai dato in pasto al report
3) gli passi i dati al report che visualizza quello che gli hai passato tu da codice, ignorando i dati del db temporaneo usato per disegnarlo
Per i punti 2,3, il codice è qualcosa di questo tipo:
...
public class Utente
{
public string Nome { get; set; }
public string Cognome { get; set; }
public int Eta { get; set; }
public DateTime DataRegistrazione { get; set; }
}
...
private void FrmCrystal_Load(object sender, EventArgs e)
{
//--- per salvarlo ho fatto un Serialize dello stesso, quindi posso usare Deserialize
List<Utente> lista = new List<Utente>();
using (FileStream stream = File.Open("c:\...\utenti.xml", FileMode.OpenOrCreate))
{
XmlSerializer ser = new XmlSerializer(typeof(List<Utente>));
lista = ser.Deserialize(stream) as List<Utente>;
}
ReportDocument report = new ReportDocument();
report.Load(@"F:\...\reportXML.rpt");
report.SetDataSource(lista);
crystalReportViewer1.ReportSource = report;
}
questo è un esempio in C# che legge un file XML caricando una collection di oggetti Utente, nel tuo caso se fosse un file Xls puoi fare una connessione OleDb e farti tornare una DataTable...quello che volevo segnalarti è il concetto sulle operazioni da fare, piuttosto che il dettaglio (magari lo vediamo con un tuo progetto reale).
Comunque sia, alla fine devi per forza scrivere codice per fare quello che vuoi fare tu 
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo