Posts
391
Comments
137
Trackbacks
0
Patchen einer Excel XLSX-Datei: DBConnectionString ändern

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();

 

posted on Wednesday, December 03, 2008 10:01 PM Print
Comments
No comments posted yet.

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 1 and 3 and type the answer here: