에서 CSV
Sub DataTable2CSV(ByVal table As DataTable, ByVal filename As String)
DataTable2CSV(table, filename, vbTab)
End Sub
Sub DataTable2CSV(ByVal table As DataTable, ByVal filename As String, _
ByVal sepChar As String)
Dim writer As System.IO.StreamWriter
Try
writer = New System.IO.StreamWriter(filename)
' first write a line with the columns name
Dim sep As String = ""
Dim builder As New System.Text.StringBuilder
For Each col As DataColumn In table.Columns
builder.Append(sep).Append(col.ColumnName)
sep = sepChar
Next
writer.WriteLine(builder.ToString())
' then write all the rows
For Each row As DataRow In table.Rows
sep = ""
builder = New System.Text.StringBuilder
For Each col As DataColumn In table.Columns
builder.Append(sep).Append(row(col.ColumnName))
sep = sepChar
Next
writer.WriteLine(builder.ToString())
Next
Finally
If Not writer Is Nothing Then writer.Close()
End Try
End Sub
당신이 정말로 그것을 원하지 않는 한에 엑셀에 대한 ADO.NET 공급자가 있습니다. 데이터 집합이있는 경우 두 개의 데이터 어댑터를 사용하여 Oracle에서 Excel로, SQL에서 Excel로, Excel에서 Oracle로 데이터를 이동할 수 있습니다.
데이터 집합을 원본을 첫 번째 DA로 가져온 다음 대상을 두 번째 DA로 업데이트합니다. DataAdapter는 동일한 유형일 필요는 없습니다. 업데이트와 함께 읽기 전용으로 OleDbDataAdapter, SqlDataAdapter, OracleDataAdapter 등을 사용할 수 있습니다.
CSV 또는 XML 형식을 사용하지 않아도됩니다. Office 자동화를 사용할 필요가 없으므로 PIA가없고 서버에서도 작동합니다. 그것은 단지 ADO.NET입니다.
Excel에 연결하려면 Microsoft.Jet.OLEDB oledb 공급자를 사용하십시오.
Full Example source.
발췌 :
System.Data.DataSet ds1;
const string ConnStringSql= "Provider=sqloledb;Data Source=dinoch-8;Initial Catalog=Northwind;Integrated Security=SSPI;" ;
const string OutputFilename= "ExtractToExcel.xls";
const string ConnStringExcel=
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + OutputFilename + ";" +
"Extended Properties=\"Excel 8.0;HDR=yes;\""; // FIRSTROWHASNAMES=1;READONLY=false\"
const string sqlSelect="SELECT top 10 ProductId, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock, GETDATE() as Extracted from Products order by UnitPrice";
const string sqlInsert="INSERT INTO Extracto (ProductId, ProductName, QuantityPerUnit, UnitPrice, UnitsInStock, Extracted) VALUES (@ProductId, @ProductName, @QuantityPerUnit, @UnitPrice, @UnitsInStock, @Extracted)";
private void ReadFromSql()
{
var ConnSql= new System.Data.OleDb.OleDbConnection(ConnStringSql);
var da1 = new System.Data.OleDb.OleDbDataAdapter();
da1.SelectCommand= new System.Data.OleDb.OleDbCommand(sqlSelect);
da1.SelectCommand.Connection= ConnSql;
ds1= new System.Data.DataSet();
da1.Fill(ds1, "Extracto");
}
private void InsertIntoExcel()
{
// need to update the row so the DA does the insert...
foreach (System.Data.DataRow r in ds1.Tables[0].Rows)
{
r.SetModified(); // mark the row as updated to force an insert
}
var da2 = new System.Data.OleDb.OleDbDataAdapter();
da2.UpdateCommand= new System.Data.OleDb.OleDbCommand(sqlInsert);
da2.UpdateCommand.Connection= ConnExcel;
da2.UpdateCommand.Parameters.Add("@ProductId", System.Data.OleDb.OleDbType.Integer, 4, "ProductId");
da2.UpdateCommand.Parameters.Add("@ProductName", System.Data.OleDb.OleDbType.VarWChar, 40, "ProductName");
da2.UpdateCommand.Parameters.Add("@QuantityPerUnit", System.Data.OleDb.OleDbType.VarWChar, 20, "QuantityPerUnit");
da2.UpdateCommand.Parameters.Add("@UnitPrice", System.Data.OleDb.OleDbType.Currency, 8, "UnitPrice");
da2.UpdateCommand.Parameters.Add("@UnitsInStock", System.Data.OleDb.OleDbType.SmallInt, 2, "UnitsInStock");
da2.UpdateCommand.Parameters.Add("@Extracted", System.Data.OleDb.OleDbType.Date, 8, "Extracted");
da2.Update(ds1, "Extracto");
}
이 엑셀 자동화 아니므로 서버에 엑셀 자동화를 사용에 적용되는주의 사항이 적용되지 않습니다.
기존 XLS 파일 (또는 XLSX)로 시작할 수 있으며 명명 된 범위 만 채울 수 있습니다. 이렇게하면 ilve 데이터를 삽입하기 전에 서식을 적용하는 등의 작업을 할 수 있습니다. 본질적으로 기존 XLS 파일은 템플릿입니다.
또는 아무것도 시작하지 않고 XLS 파일에서 XLS 파일 및 테이블/범위를 완전히 동적으로 런타임에 만들 수 있습니다. 이 경우 XLS 파일은 꽤 바닐라/평범 할 것입니다. 서식, 색상, 수식 등이 없습니다.
또한 간단한 HTML 테이블 태그 (또는있는 gridview) 다음 코드 숨김에서 page.load에서이 라인을 포함 사용하여 .aspx 페이지에 HTML의 테이블을 만들 수 있습니다
내가 왜 downvoted 되었습니까? – Malfist
@Malfist : 툴팁에 따르면,이 대답은 분명히 도움이되지 못했습니다. – GEOCHET
질문에 대한 답변입니다. – Malfist