• ベストアンサー

エクセルに入力した数値を出力するには

 エクセルに入力された数字(データベース)をC言語のプログラムで読み取り、それをコンパイルして出力したいのですが、エクセルの数値がうまく出力されず 空白になってしまいます。プログラム自体にはエラー、警告等がないので、問題はないとは思いますが...エクセルの方の設定がうまくいってないのでしょうか?ご教授お願いします。 ちなみに、コンパイラはボーランドのフリーコンパイラで、OSはWinXPです。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#1>そのままでは、コンパイルが通りませんでしたが、 エクセルからうまく値を取り出せましたよ。 >dbq=C:\test.xls がdbq=C:\\test.xls だとか? ODBCの設定がうまくないだとか

noname#89227
質問者

お礼

「¥」が抜けてたみたいでした。実行したらうまくいきました。 どうもありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

CreateOleObject関数を使いOleObjectによる方法なら、 Variant wBook; wBook = wBooks.OleFunction("Open","c:\\Excel\\Book1.xls"); //呼び出し側のファイルの指定を忘れている。 Variant wSheet; Variant sRange; sRange = wSheet.OlePropertyGet("Range","A1"); //セルの指定が"1A"になっているためよみこめない(エラーがでない) 等の記述に問題はないですか

noname#89227
質問者

お礼

呼び出しのファイル設定の¥が抜けてました。 どうもありがとうございました。

すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ソースを補足で挙げていただけませんか

noname#89227
質問者

補足

これなんですけど。 #include <windows.h> #include <sql.h> #include <sqlext.h> #include <stdio.h> #pragma comment(lib, "odbc32.lib") int main() { HENV henv; HDBC hdbc; HSTMT hstmt; RETCODE rc; TCHAR *ucConnectStr = "Driver={Microsoft Excel driver (*.xls)};dbq=C:\test.xls"; TCHAR ucOutConnectStr[1024]; SQLSMALLINT pcbConOut = 0; UCHAR select[] = "SELECT * FROM [Sheet1$A3:B4]"; SQLSMALLINT nresultcols = 0, i; // カラム数と,forループ変数 SQLCHAR colname[128]; SQLSMALLINT colnamelen = 0; SQLSMALLINT coltype = 0; SQLUINTEGER collen; SQLSMALLINT scale = 0; SQLSMALLINT nullable = 0; UCHAR data[30][256]; SQLINTEGER datastrlen[30]; SQLAllocEnv(&henv); SQLAllocConnect(henv, &hdbc); rc = SQLDriverConnect(hdbc, NULL, (SQLTCHAR*)ucConnectStr, lstrlen(ucConnectStr), (SQLTCHAR*)ucOutConnectStr, sizeof(ucOutConnectStr), &pcbConOut, SQL_DRIVER_NOPROMPT ); // パラメータを文字列で指定してODBCドライバに接続する ucOutConnectStr[pcbConOut] = '\0'; printf("%s\n",ucOutConnectStr); if (rc != SQL_SUCCESS && rc != SQL_SUCCESS_WITH_INFO) { SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv); return -1; } SQLAllocStmt(hdbc, &hstmt); if (SQLExecDirect(hstmt, select, SQL_NTS) != SQL_SUCCESS) { SQLFreeStmt(hstmt, SQL_DROP); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv); return -2; } SQLNumResultCols(hstmt, &nresultcols); for (i = 0; i < nresultcols; i++) { SQLDescribeCol(hstmt, (UWORD)(i + 1), colname, (SWORD)sizeof(colname), &colnamelen, &coltype, &collen, &scale, &nullable); printf("%s\t", colname); SQLBindCol(hstmt, (UWORD)(i + 1), SQL_C_CHAR, data[i], sizeof(data[0]), &datastrlen[i]); } printf("\n"); while (TRUE) { rc = SQLFetch(hstmt); if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) { for (i = 0; i < nresultcols; i++) { if (datastrlen[i] == SQL_NULL_DATA) { printf("null\t"); } else { data[i][datastrlen[i]] = '\0'; printf("%s\t", data[i]); } } } else { break; } printf("\n"); } SQLFreeStmt(hstmt, SQL_DROP); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv); return 0; }

すると、全ての回答が全文表示されます。

関連するQ&A