Eine Excel 2007 Datei besteht intern aus mehreren gezippten XLM-Dateien. Das kann man sehen wenn man eine XLSX-Datei z.B. mit Winrar öffnet.
In einer dieser XLM-Dateien (xl\connections.xml) steht der verwendete DB-Connection-String mit den Information wie Zugangsdaten, Datenbank-Server, Datenbank sowie die verwendete ODC-Datei.
In einer Sharepoint-Umgebung kann es sinnvoll sein in den Excel-Services eine XLSX-Datei als Vorlage anzulegen und diese für verschiedene Auswertungen automatisiert zu kopieren und hierbei den DBConnectionString anzupassen.
Die folgende Code-Fragment entpackt die übergebene XLSX-Datei in ein Work-Verzeichnis, patched die Datei xl\connections.xml und zippt anschließend die XLSX-Datei wieder. Das verwendete Command line Tool zum zippen und entzippen kann man hier herunterladen: http://www.7-zip.org/download.html
// unzip XLSX file
string sFilename = "Path / Filename";
string sFind = "Find";
string sReplace = "Replace";
string sWorkDirectory = @"./worktemp";
string sProgram = @"C:\temp\7za.exe";
string sArguments = " x \"" + sFilename + "\" -o" + sWorkDirectory;
Process process1 = new Process();
process1.StartInfo.FileName = sProgram;
process1.StartInfo.Arguments = sArguments;
process1.Start();
// manipulate the file connections.xml
string sFilenameXML = sWorkDirectory + @"\xl\connections.xml";
string sContentXML = string.Empty;
sContentXML = File.ReadAllText(sFilenameXML);
sContentXML = Regex.Replace(sContentXML, sFind, sReplace);
File.WriteAllText(sFilenameXML, sContentXML);
// zip the changes back in the XLSX file
if (File.Exists(sFilename)) File.Delete(sFilename);
sArguments = " u -tzip \"" + sFilename + "\" " + sWorkDirectory + "\\*.* -r";
Process process2 = new Process();
process2.StartInfo.FileName = sProgram;
process2.StartInfo.Arguments = sArguments;
process2.Start();