मैं Outlook के भीतर से नेटवर्क शेयर पर स्थित एक्सेल वर्कबुक में हेरफेर करने के लिए सी # फ्रेमवर्क 4.5, नेटऑफिस 1.6 और तेज विकास 4.4.1 का उपयोग कर रहा हूं।प्रोग्रामेटिक रूप से उपयोगकर्ता को एक्सेल वर्कबुक लॉक कर रहा है
कुछ बिंदु मैं बहुत तरह ReadWrite को कार्यपुस्तिका वस्तु (EWB) की फ़ाइल का उपयोग बदलने की जरूरत पर:
ewb.ChangeFileAccess(Excel.Enums.XlFileAccess.xlReadWrite, System.Reflection.Missing.Value, true);
इससे पहले कि मैं फ़ाइल का उपयोग बदलने के लिए, मैं अगर फ़ाइल सर्वर पर लॉक किया गया है की जाँच । अगर फ़ाइल लॉक है, तो मैं उपयोगकर्ता को बाद के बिंदु पर कार्रवाई को पुनः प्रयास करने के लिए सूचित करूंगा।
अब, मैं उस उपयोगकर्ता नाम को शामिल करना चाहता हूं जो अधिसूचना में एक्सेल फ़ाइल लॉक कर रहा है। मैंने एमएसडीएन, नेटऑफिस फोरम, इत्यादि की खोज की है ... और मुझे कोई समाधान नहीं मिला है। मुझे पता है कि, यदि आप एक्सेल फ़ाइल रीडराइट खोलते हैं, तो यह उपयोगकर्ता का नाम xlsx फ़ाइल में संग्रहीत करेगा। मैं सी # के माध्यम से जानकारी के उस विशेष टुकड़े तक कैसे पहुंच सकता हूं?
संपादित करें: मैं यह कर समाप्त हो गया:
public string GetExcelFileOwner(string path, NetOffice.ExcelApi.Enums.XlFileFormat ffmt) {
string tempmark = "~$";
if(ffmt==NetOffice.ExcelApi.Enums.XlFileFormat.xlExcel8) {
tempmark = "";
}
string uspath = Path.Combine(Path.GetDirectoryName(path), tempmark + Path.GetFileName(path));
if (!File.Exists(uspath)) return "";
var sharing = FileShare.ReadWrite | FileShare.Delete;
using (var fs = new FileStream(uspath, FileMode.Open, FileAccess.Read, sharing))
using (var br = new BinaryReader(fs, Encoding.Default)) {
if(ffmt==NetOffice.ExcelApi.Enums.XlFileFormat.xlExcel8) {
byte[] ByteBuffer = new byte[500];
br.BaseStream.Seek(150, SeekOrigin.Begin);
br.Read(ByteBuffer, 0, 500);
return matchRegex(System.Text.Encoding.UTF8.GetString(ByteBuffer), @"(?=\w\w\w)([\w, ]+)").Trim();
}
else {
return br.ReadString();
}
}
}
private static string matchRegex(string txt, string rgx) {
Regex r;
Match m;
try {
r = new Regex(rgx, RegexOptions.IgnoreCase);
m = r.Match(txt);
if (m.Success) {
return m.Groups[1].Value.ToString();
}
else {
return "";
}
}
catch {
return "";
}
}
हम Excel 2003 का उपयोग कर रहे हैं और 2007+ फ़ाइल स्वरूप Excel (.xls और .xlsx)। .xls के लिए मुझे .xls फ़ाइल में ही देखना था। .xlsx के लिए, लॉकिंग उपयोगकर्ता ~ $ temp फ़ाइल में संग्रहीत है। मुझे पता है, .xls फ़ाइल के लिए, यह गंदा कोड है, लेकिन मुझे कोई संकेत नहीं है कि .xls फ़ाइल प्रारूप कैसे संरचित है। इसलिए, मैंने बस बाइट्स का एक गुच्छा पढ़ा है जिसमें एएससीआई उपयोगकर्ता नाम शामिल है और उस उपयोगकर्ता नाम को निकालने के लिए एक रेगेक्स करें।
क्या आपने Win32_ConnectionShare और WMIC को देखने का प्रयास किया है? –