更好的是,製作一個MIME Type
,這樣當用戶雙擊「.por」文件時,它會觸發一個exe文件來告訴用戶該做什麼。而不是在Excel中打開它。如果你不告訴他們,用戶不會知道por文件是Excel文件。
由於XLS的是二進制文件 - 如果文件的擴展名更改用戶不會 知道MIME類型,除非他們使用的是這樣的: Determining MIME Type of MAC upload stream file
關於採取一個DataTable和逐行寫入Excel文件。
你可以很容易地將數據轉換成二維數組:
string[,] TwoDimensional = new string[dt.Rows.Count, dt.Columns.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < dt.Columns.Count; i++)
{
TwoDimensional[i, j] = dt.Rows[i][j].ToString();
}
}
而且一舉將它們設置在Excel中:
using (var targetRangeHeader = _excelApp.Range["A1"].WithComCleanup())
using (var targetRangeFirstDataCell = targetRangeHeader.Resource.Offset[1, 0].WithComCleanup())
using (var targetRange = targetRangeFirstDataCell.Resource.Resize[LengthOfArray, 1].WithComCleanup())
{
....
targetRange.Resource.Value2 = TwoDimensional;
注意我使用VSTO Contrib爲finalistic決心 - 即using
聲明。
不要忘記這一點(記錄當前的計算模式,並恢復它,而不是假設用戶使用的是自動):
public static void TurnOffApplicationSettings(Excel.Application xlApp)
{
xlApp.ScreenUpdating = false;
xlApp.DisplayAlerts = false;
xlApp.Calculation = XlCalculation.xlCalculationManual;
xlApp.UserControl = false;
xlApp.EnableEvents = false;
}
public static void TurnOnApplicationSettings(Excel.Application xlApp)
{
xlApp.ScreenUpdating = true;
xlApp.DisplayAlerts = true;
xlApp.Calculation = XlCalculation.xlCalculationAutomatic;
xlApp.UserControl = true;
xlApp.EnableEvents = true;
}
你見過上生成Excel文件的LINQ to XML的任何物品,有一個未知的擴展(&/或MIME類型),這將有助於僞裝文件。 –
備註:如果你想讓用戶不打開你的文件 - 不要創建它們(半開玩笑)。如果您使用常用的文件格式(即Excel的,一些XML,CSV ...)你有兩個好處 - 用戶可以放心,數據不會消失,因爲你希望刪除舊的文件格式,並且可以通過使用另一種工具來獲得相同的文件格式,從而輕鬆確認數據是否合理。雖然自定義格式是有趣的想法開始,它也帶有定製版本,遷移,轉換爲其他格式。根據你是否關心用戶,你可能花費你太多的努力... –
我知道你說過「不是SQL」,但你看過使用SQL CE。它是一個輕量級的SQL版本,不需要安裝,它可以與所有內置的API一起使用。這是一篇很棒的文章,內容涵蓋ScottGu的一個基本[如何](http://weblogs.asp.net/scottgu/archive/2011/01/11/vs-2010-sp1-and-sql-ce.aspx)。 – Zachary